怎样给指针赋值算是合法的。。指针的值要指向一个具体的变量?但是貌似可以这样的赋值
int a,*p;*p=a;
a并没有具体的值但是指针能这样赋值
还有指针之间相互赋值有什么条件?具体点~~~
关于C语言中指针赋值的问题
答案:3 悬赏:50 手机版
解决时间 2021-02-19 15:34
- 提问者网友:蓝琪梦莎
- 2021-02-18 17:19
最佳答案
- 五星知识达人网友:刀戟声无边
- 2021-02-18 18:15
指针赋值问题:
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的值也会改变,,,
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的值也会改变,,,
全部回答
- 1楼网友:煞尾
- 2021-02-18 19:21
int a,*p;p=&ap是一个指针,用来存放地址,所以应该吧变量a的地址赋给p
- 2楼网友:持酒劝斜阳
- 2021-02-18 18:48
你这样想说明你还没有真正理解内存和指针。inta;表示编译器随机取出一个空闲的地址分配给a,不妨设为00000000,长度为sizeof(int),不同编译器可能不同。int*p;也表示随机取出一个空闲的地址分配给p,不妨设为000000f0,长度一般为4个字节,则这四个字节现在存储的内容是不确定的,假设为00000ff0,那么*p表示地址00000ff0上的值。*p=a则把地址00000ff0的值变为a的值,显然如果该地址目前正在被某个进程使用,就有可能破坏该进程,因此这种方法是十分危险的。给指针赋值一般有两种方法,一种是将已经存在的变量的地址传递给指针,格式为:p=&a;另一种是首先为指针申请指向的合法内存,c语言中用函数malloc(),然后给已申请的地址赋值,如*p=6。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯