const关键字多出现在指针变量声明的时候,但是const的位置多变,在不同的位置意义不同
1.const int * a
这是最常见的情况
测试代码如下:
#include<stdio.h>
int main()
{
int num1 = 7;
int num2 = 8;
const int* a = &num1;
*a = 9;
a = &num2;
return 0;
}
在VS环境下,编译器报错
报错位置
说明一个问题:const放在该位置让指针变量不能通过解引用修改指向的内存空间的内容,但是能修改指针变量指向的位置
2.int const * a
#include<stdio.h>
int main()
{
int num1 = 7;
int num2 = 8;
int const * a = &num1;
*a = 9;
a = &num2;
return 0;
}
编译器同样报错
并且报错位置相同,所以const放在此位置作用与第一种情况完全相同,其原因是声明指针变量a时,const的位置都在*a之前,表明指向内存空间的值不能被该指针修改
3.int * const a
#include<stdio.h>
int main()
{
int num1 = 7;
int num2 = 8;
int * const a = &num1;
*a = 9;
a = &num2;
return 0;
}
编译器同样报错,但是这次报错的位置不同了
这表明:const在该位置时,修饰的指针变量指向的位置不能被修改,但是能修改指向的内存空间存放内容