您的位置:首页 > 其它

const与指针

2017-07-09 18:20 162 查看
关键:分清const修饰的是什么,其修饰的东西不可变

1、const指针

int *const p; // const修饰的是p, 而p是一个指针,
//指向的肯定是一个int类型的地址,
//即指向的地址不可变;但p指向的地址上的值可变


示例:

int a = 10;
int b = 20;

int *const p = &a;
printf("p = %p\n", p); // %p 十六进制格式输出

*p = 100; // no error
p = &b;   // error, p是一个const指针,指向的地址不可变,
// 指向地址上的值可变

printf("p = %p\n", p);


2、指向const的指针

int const *p; // const修饰的是*p,即修饰的是指针p指向
// 地址上的内容,即指向地址上的内容不可变,
// 指向的地址可变;这样的指针常用来作为函
// 数的参数,可避免修改对应地址上的值


示例:

int a = 10;
int b = 20;

int const *p = &a;

printf("a = %d\n", a);
printf("*p = %d\n", *p); // 10
printf("p = %p\n", p);

*p = 100; // error
p = &b;   // no error

printf("p = %p\n", p);
printf("*p = %p\n", *p); // 20


3、 1与2结合

int const a = 1;
int const *const p = &a; // p是一个const指针,指向的是一个const int变量。
//此时p指向的地址以及指向地址上的值都不可改变。


注意:const指针必须在定义时初始化,因为其只向的值不能改变。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: