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; // 报错,不允许赋值操作
      
全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务