c++ const

全局与局部

const int a = 100;//不要把a看成常量,a的本质 是变量 只是 只读变量

[fun.c]

//c语言的const修饰全局变量 默认是(外部链接的)
//外部链接:其他源文件可以使用
const int m = 100;//只读的全局变量 内存放在文字常量区(内存空间只读)

[main.c]

//对fun.c中的num进行声明(不要赋值)
extern const int m;
void test()
{
    printf("m = %d\n",m);
    //m = 100;//error num只读
   
    //C语言中const修饰变量名 说明变量名为只读(用户不能通过变量名data进行赋值)
    const int d = 100;//局部只读变量 内存在栈区(内存可读可写)
    //d = 200;//error
     
    printf("data = %d\n",data);
    //但是可以通过data地址间接的修改data所对应空间的内容
    int *p = (int*)&data;
    *p = 2000;
     printf("data = %d\n",d);//ok 
}

tip

1、const修饰全局变量名只读,内存空间在文字常量区(只读)、不能通过地址修改空间内容
2、const修饰局部变量名只读,内存空间在栈区(可读可写),可通过地址间接修改空间内容

 外部链接

[fun.cpp]
//const修饰全局变量,默认内部链接(只在当前源文件有效,在其他源文件不可读)
//const int m1 = 100;

//若其他源文件要用,必须在变量m前加extern转换成外部链接
extern const int m = 100;

[main.cpp]

//声明
extern const int m;
struct Person
{
    int num;
    char name[32];
};

void main()
{
    //cout<< "全局m1 = "<< m1 <

你可能感兴趣的:(c/c++,c++,c语言,开发语言)