为何解引用数组指针时会报错?C语言新手技术问询
关于C语言指针与数组下标运算的疑问解答
- 核心结论:直接写
a[index] * 2就对了,不需要额外加*。
原因很直白:
- 在C语言里,数组下标运算符
[]本身就包含了解引用操作。a[index]完全等价于*(a + index)——a是指向数组首元素的指针,a + index算出指向第index个元素的地址,*负责把这个地址里的值取出来。 - 你写的
*a[index]会触发运算符优先级问题:[]的优先级比一元*高,所以编译器会先算a[index],得到的是一个int类型的数值。这时候再对这个数值用*(解引用操作,只能针对指针),自然就会报错:error: invalid type argument of unary ‘*’ (have ‘int’)——意思就是你给一元*传了个int,但它要的是指针类型。
举个实际例子:假设a指向数组arr的首元素,index=0,a[0]就是arr[0]的数值(比如5)。*a[0]就变成了*5,这显然不合理——你没法对数字5解引用,只有指针变量(或地址值)才能用*取内容。
内容的提问来源于stack exchange,提问作者RobertC
相关产品推荐
相关产品推荐

