运营商 - >在malloc函数中

时间:2017-03-10 18:08:19

标签: c pointers malloc

在这里观看:

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

但是数组是一个指针!

3 个答案:

答案 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]不是指针值。因此,您需要使用.组件选择运算符而不是->