对不起,有个地方写错了 ==》
——int * const p = a;
// *p = 2; /*可以*/
// *(p+1) = 10;/*可以*/ --》这里应该是不可以,改正一下,指针不能移动
// p++; /*不可以*/
我的原则很简单:不做不喜欢的事!
对不起,有个地方写错了 ==》
——int * const p = a;
// *p = 2; /*可以*/
// *(p+1) = 10;/*可以*/ --》这里应该是不可以,改正一下,指针不能移动
// p++; /*不可以*/
补充一点:(纯属个人经验)
虽然不能对指向常量的指针直接赋值:但可以通过scanf使其赋值。
例:
const int b=0;
int a;
const int *pt=&a;
*pt=3; //不可以
scanf ("%d",pt); //可以。 输出*pt==3,a==3。(pt的值为变量a的地址)
pt=&b; //pt可以再次指向一个常量或变量
pt=3; //不可以
scanf ("%d",pt); //可以。输出*pt==3,b==0。
(注意:pt=&b后, pt的值虽为常量b的地址,但输出却是*pt==3,b==0)
谢谢12楼的兄弟。但是最后一点错误,就这句:
(注意:pt=&b后, pt的值虽为常量b的地址,但输出却是*pt==3,b==0)
==》当你再输入一个数给pt,b也跟着改变;参考下面代码:
--------------
#include<stdio.h>
int main(void)
{
const int a = 2;
const int b=0;
const int *pt=&a;
printf("%d\n", *pt); //2
scanf ("%d",pt); // pt = 4;
printf("%d\n", *pt); // pt = 4;
pt = &b; // pt = 0;
scanf("%d", pt); // pt = 6;
printf("%d %d\n", *pt, b); // pt = 6, b = 6
system("pause");
return 0;
}
补充一点:(纯属个人经验)
虽然不能对指向常量的指针直接赋值:但可以通过scanf使其赋值。
例:
const int b=0;
int a;
const int *pt=&a;
*pt=3; //不可以
scanf ("%d",pt); //可以。 输出*pt==3,a==3。(pt的值为变量a的地址)
pt=&b; //pt可以再次指向一个常量或变量
pt=3; //不可以
scanf ("%d",pt); //可以。输出*pt==3,b==0。
(注意:pt=&b后, pt的值虽为常量b的地址,但输出却是*pt==3,b==0)
为什么我通过调试之后*pt==3,而b==3
const没有起到任何作用呢,我用的win-tc