當用const進行修飾時,根據const位置的不同有三種不同效果。 判斷的標準是:const修飾誰,誰的內容就是不可變的。
1 const int *p = &a;
const修飾*p, *p不可變,p是指針,*p是指針p指向的內存單元裏的內容,*p不可變也就是p指向的內存單元裏的內容是不可變的。
PS: 這兒*p是不可變的,但是p是可變的,就是p指向的內存單元或者說變量是可以變的,但是p指向誰,誰的值就不可變。
不可變指的是不能用*p改變a的值,但是a自己或者別的指針還是可以修改a的值。
int main(void)
{
int a = 10;
const int *p = &a; //不可以用*p改變a的值
int *q = &a;
*q = 20; //可以用*q改變a的值
printf("a = %d \n", a);
a = 30; //給a賦值也可以修改a的值
printf("a = %d \n", a);
system("pause");
return 0;
}
使用時機:定義形參時,如果不想改變參數的值,可以用const修飾
2 int* const p = &a;
const修飾p,指針p是不可變的,也就是p指向的內存單元不可變。即p的指向不可變,p指向的內存單元的內容可以變。
3 const int* const p = &a;
*p和p都被const修飾了,所以p指向的內存單元,和p指向內存單元中存放的內容都是不可變的。