这么快,奇怪的问题: 我参加了考试,问题是:
char c = 'A'
char *p =&c
char **p2 = &p
void *v = &p2
写下面表达式的类型(即int,void *等):
&v
p2 + 1
v[0]
我回答:
void **
char**
并失去了全部功劳。在我试图获得积分之前,我只是希望得到某人的第二意见。
我不太确定,但我认为,因为v
是指向内存地址的void
指针,v
的地址应该是void**
。但是,如果取消引用v
,那么它将是char****
。
p2
是char**
,因此向其添加1仍然会使其成为char**
。
v[0]
不存在。
如果有人可以帮我解决这种愚蠢的问题,我会非常感激。 谢谢。
答案 0 :(得分:5)
你的答案是正确的,原因是你提出的原因(除了有关解除引用v
的内容之外,虽然听起来你已经知道你不能取消引用void *
)。
答案 1 :(得分:0)
p2+1
是一个等待发生的段错误,而v[0] == *(v+0) == *v
是无效的,因此无效。如果进行类型转换,它应该是一个char **。