我对指针和数组有一些了解。
阵列

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));

在编译期间,上面一行给出“error:expected identifier before'*'token”。

最佳答案

表达式var.a[0]被解析为(var.a)[0];将前导var.看作是结构类型1中数组对象的一种路径名。
因此,记住a[i]等同于*(a + i),在本例中a等同于var.a,那么指针等价于*(var.a + i)
因此:

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

在处理数组时,请坚持使用数组表示法;它比使用指针表达式更容易处理、更容易阅读,而且不一定比使用指针表达式慢。
1。这是一个可怕的比喻,有很多原因,但这是我能想到的最好的。

关于c - 如何以指针格式访问结构内部的数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32634223/

10-11 23:01
查看更多