一、首先
const int p = 10;
int const p = 10; //是没有区别的
二、const int *p的用法
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
int a = 1;
int b = 2;
const int *p;
p = &a;
p = &b;
b = 3;
//*p = 4; error: assignment of read-only location ‘*p’
printf("%d\n", *p);
return 0;
}
//结果
3
Process returned 0 (0x0) execution time : 0.507 s
Press any key to continue.
//说明
*p是常量,不可更改,但指针p还是变量,你想怎么 变都可以。
三、int *const p的用法
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
int a = 1;
int b = 2;
int *const p = &a; //只能在声明的时候就给它赋初值,否则还是会报错的
//p = &b; error: assignment of read-only location ‘*p’
a = 3;
printf("%d\n", *p);
return 0;
}
//结果
3
Process returned 0 (0x0) execution time : 0.233 s
Press any key to continue.
//说明
p是常量,也就是说p所指向的地址是不可以更改的,所以当把b的地址赋值给p时就会报错!但是p所指的地址内容是可以改变的。
四、const int *const p
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
int a = 1;
int b = 2;
const int *const p = &a;
//p = &b;
//*p = 3;
printf("%d\n", *p);
return 0;
}
//说明
这个就相当于以上两种情况的混合体,p是常量,所以不能把b的地址赋给p;同时*p也是常量,所以*p的内容不可更改!
五、总结
根据const的位置,先确定哪个是常量。