const关键字是一个用来限定变量不被修改的修饰符,在一定程度上可以提高程序的安全性和可靠性。
1)int *const p
const修饰p,故而直接对p进行赋值修改是非法的,p只能指向初始化地址,修改p指向的内容是合法的。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
int a=1;
int b=2;
int *const p=&a;
printf("p address %x, p value is %d.\n", p, *p);
*p=b;//p=&b是非法的,因为p的地址不能被改变
printf("p address %x, p value is %d.\n", p, *p);
}
2)int const *p
const修饰的对象是p指向的内容,所以对*P的赋值是非法的,但通过修改p指向的地址是允许的。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
int a=1;
int b=2;
int const *p;
p=&a;//*p=a是非法的
printf("p address %x, p value is %d.\n", p, *p);
p=&b;
printf("p address %x, p value is %d.\n", p, *p);
}
3)int const* const p
const同时修改了p和p指向的内容,所以p和*p在初始化时就被确定了,任何赋值都是非法的。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
int a=1;
int b=2;
int const *const p=&a;//必须在声明时初始化
printf("p address %x, p value is %d.\n", p, *p);
}