我用C编写了一个程序,它有一个名为ak的结构。
有一个指针数组s存储ak类型的数组p的地址。输入值后,只打印str
如何使用指针数组同时打印strid
集合1:

#include<stdio.h>
typedef struct
{
    char str[10];
    int id;
}ak;

int main()
{
    printf("Hey\n");
    int i;
    ak *s[5],p[5];
    for(i=0;i<5;i++)
    {
        s[i]=&p[i];
        printf("Input string:");
        scanf("%s",&p[i].str);
        printf("Input id:");
        scanf("%d",&p[i].id);
    }
    i=0;
    while(i<5)
    {
        printf("%s\n",s[i].id);
        ++i;
    }
    return 0;
}

集合2:
#include<stdio.h>
typedef struct
{
    char str[10];
    int id;
}ak;

int main()
{
    printf("Hey\n");
    int i;
    ak *s[5],p[5];
    for(i=0;i<5;i++)
    {
         s[i]=&p[i];
         printf("Input string:");
         scanf("%s",&p[i].str);
         printf("Input id:");
         scanf("%d",&p[i].id);
    }
    i=0;
    while(i<5)
    {
         printf("%s\n",s[i]);
         ++i;
    }
    return 0;
}

所以当我尝试set1代码时,它给了我一个错误说:
C:\CPP\c\Prototypes>gcc -o ct structure.c
structure.c: In function 'main':
structure.c:22:32: error: request for member 'id' in something not a structure or union

       printf("%s\n",*s[i].id);
                          ^

截图如下:
https://imageshack.com/a/img921/3084/j1rHig.png
当我尝试set2代码时,它只打印str值。
截图如下:
https://imageshack.com/a/img922/614/JHSGZ9.png

最佳答案

关于set1和你的printf("%s\n",*s[i].id);问题。
*s[i].id相当于*(s[i].id),而不是您可能认为的(*s[i]).id。因为s[i]的类型是ak *,所以无法通过s[i].id获取其字段id。
您可以编写(*s[i]).id,但更可读的方法是使用s[i]->id
您的printf还有一个问题,格式不能是"%s",因为s[i]->id是int,而不是char*
关于set2
您确实printf("%s\n",s[i]);,而且您很惊讶,因为只有字符串是打印的,您怎么能期望打印字符串和int?
您请求打印字符串(格式%s),但s[i]不是字符串。碰巧,str的开头字段str是一个字符串,所以可以编写它,但这不是正确的方法。
必须显式地打印每个属性,例如执行printf("%s %d\n",s[i]->str, s[i]->id);

关于c - 如何使用指针数组打印结构实体?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53994635/

10-09 15:51
查看更多