本文只是一篇学习笔记,是看了《彻底搞定C指针》中的相关篇幅后的一点总结,仅此而已!
一、先搞清const int *p与int const *p的区别
它们的区别就是:没有区别!!
无论谁在前面都没有影响!所以const int *p与int const *p用法一样!
二、const int *p的用法
-
#include
-
#include
-
#include
-
-
int main(int argc, char **argv)
-
{
-
int test1 = 1;
-
int test2 = 2;
-
const int *p;
-
-
p = &test1;
-
p = &test2;
-
test2 = 3;
-
-
printf("%d\n", *p);
-
-
return 0;
-
}
执行结果 :3 ,这个好理解,如果加入被我注释掉的那一行就会报错,编译通不过,我用的是gcc version 4.4.3。也就是说*p是常量,不可更改,但指针p还是变量,你想怎么 变都可以。
三、int *const p的用法
-
#include
-
#include
-
#include
-
-
int main(int argc, char **argv)
-
{
-
int test1 = 1;
-
int test2 = 2;
-
int *const p = &test1;
-
-
-
test1 = 3;
-
printf("%d\n", *p);
-
-
return 0;
-
}
执行结果 :3 ,这样用p是常量,也就是说p所指向的地址是不可以更改的,所以当把test2的地址赋值给p时就会报错!但是p所指的地址内容是可以改变的。
三、补充const int *const p
-
#include
-
#include
-
#include
-
-
int main(int argc, char **argv)
-
{
-
int test1 = 1;
-
int test2 = 2;
-
const int *const p = &test1;
-
-
-
-
printf("%d\n", *p);
-
-
return 0;
-
}
执行结果 :1,这个就相当于以上两种情况的混合体,p是常量,所以不能把test2的地址赋给p;同时*p也是常量,所以*p的内容不可更改!
阅读(1500) | 评论(0) | 转发(0) |