int *p=&a;和 int *p; *p=a;和 int *p; p=&a;有区别么?

来源:百度知道 编辑:UC知道 时间:2024/05/21 14:20:52
我怎么看起来一样的哈。
有道选择题,若有定义int a=5;下面对(1)和(2)两个语句的正确解释是____。
(1)int *p=&a; (2)*p=a;
A.语句(1)和(2)中的*p含义相同,都表示给指针变量p赋值。
B.(1)和(2)语句的执行结果,都是把变量a的地址值赋给指针变量p
C.语句(1)在对p进行说明的同时进行初始化,使p指向a
语句(2)将变量a的值赋给指针变量p
D.语句(1)在对p进行说明的同时进行初始化,使p指向a
语句(2)将变量a的值赋给*p
答案是D,可我看答案ABD怎么都对啊?????

当然是d正确
int *p=&a; 与 int *p; p=&a;
这两个是等价的
但是int *p; *p=a; 就不同了,只是把a的值赋给*p,并没有让p指向a的地址

语句(1)实际上相当于下面的两个语句:
int *p;
p=&a;
是一个定义语句,和一个赋值语句:把变量a的地址赋给指针变量p

语句(2)就非常简单,对指针p指向的地方赋与一个值

第一个就不用说了,(2)没有定义*p,所以有可能出错的呀
第二个中的是原因,&a表示的是地址而a表示的可不是呀,他表示的是一个整型 变量
第三个吗,我怎么觉得应该是C对呢而不是D对呢

1.是声明一个指针变量,其中P就是那个指针变量,使p指向a
2.p的值就等于p所指向的内存地址中存储的值,就是变量a

A选项中第二个语句中*P其实就是变量a,当然和第一个语句不一样啦,B选项第二个语句赋的是a的值,而不是地址