Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何以指针格式访问结构内部的数组?_C_Arrays_Pointers_Struct - Fatal编程技术网

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

C 如何以指针格式访问结构内部的数组?,c,arrays,pointers,struct,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(

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

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)); 
上面的一行给出了错误:编译过程中“*”标记前面应该有标识符

printf("array is %d,%d,%d\n",*var.a,*(var.a+1),*(var.a+2)); 
对于结构,var.a是指针

就结构而言,var.a是指针。

简单想想

#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;
}
简单地想一想

#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;
}
表达式var.a[0]被解析为var.a[0];将前导变量视为struct type1中数组对象的路径名

记住,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.出于许多原因,这是一个可怕的类比,但这是我能想到的最好的类比。

表达式var.a[0]被解析为var.a[0];将前导变量视为struct type1中数组对象的路径名

记住,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.出于许多原因,这是一个可怕的类比,但这是我能想到的最好的类比。

谢谢@John Bode。我没有更多的澄清。哪一个在这里有基址?变量?还是一个?谢谢@John Bode。我没有更多的澄清。哪一个在这里有基址?变量?还是一个?