如何以指针格式访问结构内的数组?

时间:2015-09-17 15:25:15

标签: c arrays pointers struct

我对指针和数组有所了解。 数组

int a[3]={1,2,3};

可以通过以下方式访问

printf("array is %d,%d,%d\n",a[0],a[1],a[2]);

或使用指针

printf("array is %d,%d,%d\n",*(a+0),*(a+1),*(a+2));

但如果它在一个结构中,我怎么能访问相同的数组呢?

 struct test{
      int a[3];
  }var={1,2,3};

一种方法是使用下面的下标进行访问。

 printf("array is %d,%d,%d\n",var.a[0],var.a[1],var.a[2]);

但是如何使用基指针访问同一个数组,就像普通数组一样?

  printf("array is %d,%d,%d\n",var.*a,var.*(a+1),var.*(a+2)); 

上面的行在编译期间给出了“错误:'*'标记之前的预期标识符”。

3 个答案:

答案 0 :(得分:3)

表达式var.a[0]解析(var.a)[0];将结构类型 1 中的数组对象的前导var.视为路径名的类型。

因此,请记住a[i]等同于*(a + i),并且在这种情况下avar.a,则等效指针为*(var.a + i)

因此:

printf("array is %d, %d, %d\n", *var.a, *(var.a + 1), *(var.a + 2));

处理数组时坚持使用数组表示法;它更易于处理,更容易阅读,并且不一定比使用指针表达式慢。

<小时/> 1。这是一个可怕的类比,原因有很多,但它是我能想到的最好的。

答案 1 :(得分:2)

printf("array is %d,%d,%d\n",*var.a,*(var.a+1),*(var.a+2)); 

在结构的情况下,var.a是指针。

答案 2 :(得分:2)

简单地思考。

#include <stdio.h>

struct test {
    int a[3];
} var={{1,2,3}}; /* add {} */

int main(void) {
    printf("array is %d,%d,%d\n",*var.a,*(var.a+1),*(var.a+2));
    return 0;
}