int i,a[10];
int *p;
p=a;
scanf("%d",p);
printf("%d",*p);可以,
而int i,a[10];
int *p;
p=a;
p=7;/*重点在这*/
printf("%d",*p);为什么不可以。不是不可以给地址赋值吗。。困惑
为什么scanf()可以给指针p赋值。而不能p=7。scanf输入的值给了地址p了啊。也相当于赋值了吧。。我不清楚了。。
我知道*p=7可以。但是我想知道的是我写的问题。。
追答地址不能直接赋值,是自动分配的,和系统运行当时的存储化境有关,不是程序中应该调整的,只能做+n或者-n的幅值,比如可以写
int i,a[10],b;
int *p;
p=a;
p++;
p=b;//吧b的值赋给a[1];但是P的具体值是未知的,变化的,这样能理解么?
为什么用scanf()函数可以给p赋值。。崩溃了。越来越乱。我就想知道这个
追答你用scanf()的时候,系统帮你处理了指针的问题。实际上可以理解成执行了*p=a的动作。
以你的例子来说,
int i,a[10];
int *p;
p=a;
p=7;/*重点在这*/
你想做的是把值赋给P,还是P所指向的a[0],如果是后者的话,写*p=a;就行,如果是前者的话,你没有理解指针的作用。因为P的值是无关紧要的,它表示了a[0]在这个程序运行时的内存号(位置),这个每次都在变,也没有必要知道,指针的幅值是用在向我上一条回答里的移位读取或写入里,比如我上一条写的,我可以不知道P的具体值是多少,但P如果指向a[0],P+1就指向a[1],这样就够了,何必去管P是多少?打字太累了。。。。你可以看看书上说的,我说的不专业
你说的我知道。但是我弄不明白为什么scanf函数可以