我知道foo[bar]
等于*(foo + bar)
,但*foo[bar]
等于什么,例如访问*argv[2]
?我对理解这一点感到有些困惑,我假设可能像*(*(foo) + bar)
但不确定......
如果这是一个简单的答案,我道歉。
答案 0 :(得分:5)
*a[b]
相当于*(a[b])
。所以
*a[b]
相当于**(a+b)
答案 1 :(得分:3)
如果以下内容相同,
foo[bar]
*(foo + bar)
以下也是等同的:
*foo[bar]
**(foo + bar)
答案 2 :(得分:2)
我的理解是**(foo + bar)
为什么呢?
*foo[bar]
分解为*和foo[bar]
,因为*在foo[bar]
被取消引用后完成。
您已经回答了foo[bar] == *(foo + bar)
现在添加另一个*,你有*(*(foo + bar))
这也简化为**(foo + bar)
答案 3 :(得分:0)
*foo[bar]
是指向foo[bar]
的指针。
答案 4 :(得分:0)
假设声明char *argv[]
,argv[2]
引用argv
数组的第三个元素,即char *
,*argv[2]
取消引用此指针,给你那个字符串中的第一个字符。