- >带数组的箭头运算符?

时间:2009-11-10 08:58:50

标签: c arrays

您可以将箭头运算符与struct类型的数组一起使用。例如:

struct {
char *foo;
} fooArray[10];

fooArray[0]->foo = ...

6 个答案:

答案 0 :(得分:4)

不,您必须使用fooArray[0].foo

fooArray是一个恰好指向数组第一个元素的指针。使用[]在指定元素处取消引用该指针,因此一旦应用它不再是指针,并且->运算符无法应用,因为该运算符同时取消引用和访问结构成员。

答案 1 :(得分:3)

请记住fooArray本身的值是一个指针。你可以取消引用指针,添加它,...

fooArray->foo; /* same as fooArray[0].foo */
(fooArray+3)->foo; /* same as fooArray[3].foo */

答案 2 :(得分:1)

你只能在指针上使用数组运算符(用于访问数据成员),fooArray [0]不是指向struct的指针,如果你想使用它,你可以使用它的地址并使用它

(&fooArray[0])->foo="hello";

或者声明指向struct的指针/指针数组并为其分配内存.. like

fooArray* a=new fooArray();
a->foo="hello";

答案 3 :(得分:1)

请记住,a->b(*a).b的简写。记住这一点应该可以帮助您解决任何问题。即,在您的情况下,fooArray[0]->foo表示(*fooarray[0]).foo,但fooarray[0]不是指针(它是结构),因此您无法取消引用它。因此它不会起作用。

答案 4 :(得分:0)

在您使用

时,不是因为您正在访问结构(而不​​是指向结构的指针)
fooArray[0]

编译器会让你知道这个问题。

答案 5 :(得分:0)

不,你不能。必须是一个指针。例如。这是正确的语法方式(但除非分配了fooArray,否则它将是segfault):

int main ()
{
struct {
char *foo;
}* fooArray[10];

fooArray[0]->foo = "hallo";
}