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。我没有更多的澄清。哪一个在这里有基址?变量?还是一个?