设有定义:int n=0,*p=&n,**q=&p;则一下选项中,正确的赋值语句是()A,P=1B.*q=2 C.q=p D .*p=5设有定义:int n = 0 ,* p =& n ,** q =& p ;则一下选项中,正确的赋值语句是()A,P =1;B.* q =2; C.q = p; D .* p =5;

问题描述:

设有定义:int n=0,*p=&n,**q=&p;则一下选项中,正确的赋值语句是()A,P=1B.*q=2 C.q=p D .*p=5
设有定义:int n = 0 ,* p =& n ,** q =& p ;则一下选项中,正确的赋值语句是()A,P =1;B.* q =2; C.q = p; D .* p =5;

D. 解释: A:因为P是指针,只能赋指针值或者NULL(也即0,就是空指针)给它.其他的都是错误的.这里复制5给它,所以错了. B:因为q是指针的指针(二级指针),只能赋给它一级指针的地址或者NULL.这里给它的是常量,所以这里也错了. C:跟B差不多(给的是p,而p=&n,就是说给q的是n的地址,n是变量地址,不是一级指针地址),所以也错了. D:p是一级指针,保存变量的地址,*是解引用操作,对p解引用之后就等同于其所保存的变量所以(*p=5,在解引用之后可以看成是n=5,因为p=&n,而给n赋值5是正确的,n是整形,5也是整形,可以赋值).