第1个回答 2020-03-11
指针赋值问题:
1指针如何赋值?
如
int
*p,**q,a;
*p=1;*p=a;
**q=a;
语法正确,但是p没有指向任何地址。因为在内存中指针分配的空间与变量分配的空间是不同的。变量分配的是栈区(具体的)
指针分配的是堆区(按要求的)如char
*p;
*p='a';
*p="aaaaa"
都正确。在计算机读取数据是是读地址后然后找到地址里面的内容。指针p是一个存放地址的变量,他本身有地址一样能输出他的地址。但a=1
;*p=a
只代
p的内容为1,a的内容为1
。诺改为
a=1;p=&a
;
*p=2;则p的内容为a的地址,a的内容为2
详细代码:
main()
{
int
*p,a=99;
*p=a;
*p=33;
printf("%d,%d",*p,a);
}
结果:33,99
//p值变,a值不变,因为p根本没有指向a的地址,先就说了计算机是根据地址找到后读取里的内容,你只是赋值,没指地址所以没有改变。
main()
{
int
*p,a=99;
p=&a;
*p=9999;
priintf("%d,%d",*p,a);
}
结果:9999,9999
//因为改变了地址,所以p的值改变则a的值也会改变,,,