在这里观看:
struct mystruct{
int a;
int b;
};
int main(void){
struct mystruct* ptr;
ptr = malloc( 10*sizeof( struct mystruct ) );
通过这种方式,我分配了一个struct数组。 如果你试图打印,例如ptr [4],你会注意到一个指针。 当我有一个指针并且我可以访问某个成员时,我必须使用 - >运营商对吗? 但如果我这样做:
ptr[4]->a
它不起作用!我必须这样做
ptr[4].a
让它发挥作用......为什么?我有一个指针! ptr [4] =(ptr + 4)对吧?
同样在正常数组中会发生这种情况:
struct mystruct array[10];
array[4].a
但是数组是一个指针!
答案 0 :(得分:5)
array[4]
不与array + 4
相同。它与*(array + 4)
相同。
array + 4
当然是指针,但array[4]
是指针指向的值(当然,如果array
是某个指针的数组,它也可能是指针类型。)
由于x->y
基本上与(*x).y
相同,因此您可以将array[4].a
重写为(array + 4)->a
,但是您很难过去大多数代码审核者。
答案 1 :(得分:0)
当你在指针上使用方括号时,它类似于取消引用该点。因此,它请求p []。语法,而不是p [] - > a
(p + 4)->a is essentially the same as p[4].a
答案 2 :(得分:0)
如果ptr
的类型为struct mystruct *
,则ptr[i]
的类型为struct mystruct
; IOW,ptr[i]
不是指针值。因此,您需要使用.
组件选择运算符而不是->
。