常量指针
const int* p = &a
指针常量
int* const p = &a
常量指针防止通过指针修改变量值
普通指针可以通过指针来修改变量值,示例代码如下。
#include <stdio.h>
#include "client.h"
int main(void)
{
int a = 10;
int* p = &a;
printf("原a值=%d\r\n", a);
*p = 15;
printf("新a值=%d\r\n", a);
return 0;
}
运行结果
可以看到通过*p修改了a的值。
常量指针表示指针对应的值(这里是是a的值,即*p是常量,不是p对应的地址值是常量)是一个常量不能够被修改。
int main(void)
{
int a = 10;
const int* p = &a;
printf("原a值=%d\r\n", a);
*p = 15; //编译器会报错--表达式必须是可修改的值
printf("新a值=%d\r\n", a);
return 0;
}
最开始以为常量指针p对应的地址是不能修改的。但是通过实验,可知常量指针p指向的地址值是可以修改的。
#include <stdio.h>
#include "client.h"
int main(void)
{
int a = 10;
int b = 20;
const int* p = &a;
printf("原p地址=%d\r\n", p);
printf("原p值=%d\r\n", *p);
p = &b;
printf("新p地址=%d\r\n", p);
printf("新p值=%d\r\n", *p);
return 0;
}
运行结果
从运行结果可以看到常量指针是可以修改指针对应的地址值的。
指针常量,是不允许修改指针对应的地址值。
#include <stdio.h>
#include "client.h"
int main(void)
{
int a = 10;
int b = 20;
int* const p = &a;
printf("原p地址=%d\r\n", p);
printf("原p值=%d\r\n", *p);
p = &b; //会报错--不能给常量复制
printf("新p地址=%d\r\n", p);
printf("新p值=%d\r\n", *p);
return 0;
}