C语言 const和指针
第一次写编程博客,供大家参考和自己记录。
const int *p=&a, const修饰的是指针变量*p,*p的值不能直接修改,比如:在程序其他地方再直接编写写*p=50,是会报错的。
int * const q=&b,const修饰的是地址q, q的地址不能直接修改,比如:在程序其他地方再编写q=&a,编译器直接报错。
int main(void)
{
int a = 10;
int b = 20;
const int *p = &a;
int * const q = &b;
*q=21;// q 可改值,不可改地址
//q=&a;//这个写法是错误的,不能直接修改q的地址
printf("q = %d\n", *q);//打印*q值为21
printf("b = %d\n", b);//打印b值为21,因为w通过地址修改b的值
b=22;
printf("q = %d\n", *q);//打印*q值为22,因为*q指向的是b的地址,b的值改变,*q的值也改变
//总结,int * const q = &b;不能直接改变q的地址,但是可以通过修改*q和*q指向的变量b来修改*q的值。
printf("a = %d\n", a);//a的初始化值为10
a = 11;//*p被const修饰,*p的值不允许直接修改,可通过修改a来修改*p
//*p = 30; //这么写就是错的
printf("*p = %d\n", *p);//*p打印11,因为a的值被修改了,p的地址是指向a的地址的,a变*p也变
p=&b;
printf("*p = %d\n", *p);//*p打印22,因为修改p的地址,*p指向a地址的值
//总结,const int *p = &a;不能直接改变*p的值,但是可以通过修改p的地址和*p指向的变量a的值来修改*p的值。
return 0;
}