main函数外的赋值

  • main函数之前是用来声明和定义全局变量和函数的,并由编译器进行预处理,给那些全局变量和定义的函数分配内存和地址,不能设计可执行代码。

  • 编译器在编译阶段(预处理、编译、汇编、链接)对main函数之前的全局变量进行内存分配,对定义的函数生成可执行的代码,并保留该函数的地址以供main函数调用,而赋值语句操作是一句可执行代码,又没有类似函数指针的东西供main函数调用,所以只能放在main函数内部进行顺序执行。

  • 变量定义时省略类型

    • 全局变量省略类型,默认为int(出现Warning)

      • 示例:

        int i;
        i = 10;		// int类型
        j = 10.9; 	// int类型
        
        int main(int argc, char *argv[])
        {
            printf("sizeof(i)=%lu\n", sizeof(i)); // 4
            printf("sizeof(j)=%lu\n", sizeof(j)); // 4
            printf("%d\n", i); // 10
            return 0;
        }
        
    • 无链接的局部变量省略类型,报错

      • 示例:

        int main(int argc, char *argv[])
        {
            i = 10; // 报错,无法通过编译
            
            printf("sizeof(i)=%lu\n", sizeof(i)); 
            printf("%d\n", i); 
            return 0;
        }
        
    • 内部链接的局部变量(用static修饰的)省略类型,默认为int(出现Warning)

      • 示例:

        int main(int argc, char *argv[])
        {
            static i = 10; // int类型
            
            printf("sizeof(i)=%lu\n", sizeof(i));  // 4
            printf("%d\n", i); // 10
            return 0;
        }
        
  • 在main函数外不能对变量赋值,只能进行定义或初始化

    • 编译器会自动将定义和第一次赋值,合并为初始化

    • 示例1:

      double i;
      i = 10; // 报错,合并时类型不匹配
      
    • 示例2:

      int a;
      a = 10; // Warning,提示使用默认类型int
      
    • 示例3:

      int a;
      a = 10;
      a = 20; // 报错,不允许赋值操作
      
全部评论

相关推荐

10-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
10-15 03:05
门头沟学院 Java
CADILLAC_:凯文:我的邮箱是死了吗?
点赞 评论 收藏
分享
评论
2
收藏
分享
牛客网
牛客企业服务