我对指针和数组有所了解。 数组
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));
上面的行在编译期间给出了“错误:'*'标记之前的预期标识符”。
答案 0 :(得分:3)
表达式var.a[0]
被解析为(var.a)[0]
;将结构类型 1 中的数组对象的前导var.
视为路径名的类型。
因此,请记住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。这是一个可怕的类比,原因有很多,但它是我能想到的最好的。
答案 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;
}