我对指针和数组有一些了解。
阵列
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/