您可以将箭头运算符与struct类型的数组一起使用。例如:
struct {
char *foo;
} fooArray[10];
fooArray[0]->foo = ...
答案 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)
int main ()
{
struct {
char *foo;
}* fooArray[10];
fooArray[0]->foo = "hallo";
}