const修饰变量为只读,不能赋值
const修饰的变量尽量初始化
知道该变量的地址也可以间接修改它的值,但是不提倡这样做
const int num = 10;
printf("num = %d\n",num); // 10
printf("&num = %p\n", &num); // &num的类型为const int *
*(int *)(&num) = 1000; // 强转为int *,可修改
printf("num = %d\n",num); // 100
二、指针常量 int * const p
const在*的右边,表示const修饰的是p,而不是*
功能:不可改变其指向,但是可以改变其指向地址中的值(*p可读可写 p只读)
指针常量必须初始化赋值,否则没有意义
不想要在程序运行过程中改变指针的指向,则可以使用指针常量
void fun1()
{
int a = 10, b = 20;
int * const p = &a; // 指针常量 p只能指向a
printf("*p=%d\n", *p); // 10
*p = 100;
printf("a=%d\n", a); // 100
// p = &b; 不能改变指针常量的指向,会报错
printf("*p=%d\n", *p); // 100
}
三、常量指针 const int *p
const在*的左边,表示const修饰的是*,而不是 p
功能:指向的地址中的值不可由指针改变,可以改变指针的指向(*p 只读 p可读可写)
由于指针被认为指向的是一个常量,所以不可改变值
void fun2()
{
int a = 10, b = 20;
const int *p = &a; // 常量指针 a的值不能改变
printf("*p=%d\n", *p);
// *p = 100;
p = &b; // 可以改变常量指针的指向
printf("*p=%d\n", *p);
}
四、指向常量的指针常量 const int * const p
-
用于只读指针(常量指针常量)不可改变指向,也不可改变指针所指向地址中的值
void fun3(const int * const p)
{
int x = 123;
printf("%d\n", *p);
// p = &x; 形参指针常量无法改变指向
// (*p)++;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)