在c语言中使用结构变量数组来访问像指针一样的值,但我不能?

时间:2014-09-04 18:59:46

标签: c

accessing structure elements using structure variable array name

正如我从指针知道的那样,数组名称充当指针。 在这里我应用了,var作为保存结构数组变量的起始地址的指针,访问类似于(var [0] .i和var [0] .a)的说明结构成员,但我无法访问它为什么?

我想知道天气我错误地理解了与数组的指针关系的概念吗?

如果我错了,请给出明确的解释。

4 个答案:

答案 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