正如我从指针知道的那样,数组名称充当指针。 在这里我应用了,var作为保存结构数组变量的起始地址的指针,访问类似于(var [0] .i和var [0] .a)的说明结构成员,但我无法访问它为什么?
我想知道天气我错误地理解了与数组的指针关系的概念吗?
如果我错了,请给出明确的解释。答案 0 :(得分:1)
试试这个
#include <stdio.h>
int main(){
struct acc {
int i;
char a[40];
} var[3]={{20,"vinay"}, {21, "sagar"},{22,"reddy"}};
printf("%d,%s,%p\n", var->i,var->a,(void*)var);
printf("%d,%s\n", (*var).i,(*var).a);
printf("%d,%s,%p\n", var[0].i,var[0].a,(void*)&var[0]);
return 0;
}
答案 1 :(得分:0)
尝试引用var->i
,而不是var.i
。 .
语法用于引用结构的成员,->
语法取消引用指向结构的指针,然后引用它的成员。
答案 2 :(得分:0)
正确的语法是
printf( "%d\n", ( *var ).i );
printf( "%s\n", ( *var ).a );
printf( "%p\n", var );
或者因为不清楚你想在printf的最后一个语句中输出什么,那么也许它可以写成
printf( "%d\n", *( int * )var );
答案 3 :(得分:0)
要从指向结构的指针引用结构成员变量,您应该使用->
运算符。
示例:
struct NODE {
int data;
struct NODE *next;
}a;
a.data=10;
a.next=NULL;
struct NODE *head = a;
printf("%d\n",head->data);
由于var是指向数组的指针,因此正确的打印方式是:
printf("%d",var->i); //Will Print 20