1、const int a=1; //此时a为常量,其值不能改变,而且在定义的同时必须初始化
错误的程序:
#include <stdio.h> #include <stdlib.h> int main() { const int a; a=1; }
a在定义的同时没有初始化,同时后面又尝试修改a的值。
正确的代码:
#include <stdio.h> #include <stdlib.h> int main() { const int a=1; }
2、const int *p; //p指向的内容不可变,但是可以使该指针指向其他的int型变量
错误的代码:
int main() { int val=1; const int *p=&val; *p=3; }
此时,尝试通过指针修改其指向的内容,报错:error: assignment of read-only location ‘* p‘
正确的代码:
int main() { int val=1; const int *p=&val; val=3; printf("%d\n",*p); }
虽然不能通过指针修改其指向的内容,但是可以通过原变量的名直接修改其指向的内容。
正确代码2:
int main() { int val=1; int k=3; const int * p=&val; p=&k; printf("%d\n",*p); }
虽然不能通过指针改变其指向对象的值,但是可以修改该指针的指向,且指针p在定义的同时,不一定要同时初始化。
3、int * const p=&val; //此时p只能指向变量val,不能指向其他变量
错误的代码:
int main() { int val=1; int k=3; int * const p=&val; p=&k; printf("%d\n",*p); }
此时会报错:error: assignment of read-only variable ‘p‘
正确代码2:
int main() { int val=1; int * const p=&val; *p=3; printf("%d\n",*p); }
虽然不能改变指针的指向,但是可以通过指针改变其指向的对象的值。
4、const int * const p=&val; //指针p的指向不能被改变,同时其指向的内容的值也不能通过该指针改变
错误的代码:
int main() { int val=1; int k=3; const int * const p=&val; p=&k; *p=3; }
此时,会有两个错误:
1)error: assignment of read-only variable ‘p‘,说明p的指向时不能改变的;
2)error: assignment of read-only location ‘*(const int*)p‘,说明p指向的对象(val),不能通过指针修改其值。
但是:
int main() { int val=1; const int * const p=&val; val=3; }
我们仍然可以通过变量名来修改其值,也就是说我们所说的“指向的对象的值不能改变”是说不能通过指针的方式修改。
时间: 2024-11-06 03:49:00