C语言中结构体输出的问题


#include
struct student{        
    char *pcNum;
    char *pcName;
    char cSex;
    struct date{
        int nYear,nMonth,nDay;
    }dBirth;
    float fScore;
}sStu1={"0804101","Mr.Zhang",'M',1979,9,1,80},sStu2;

void main()
{    
    sStu2=sStu1;/*同类型结构体变量之间进行赋值运算*/
    printf ("Number=%s\n",sStu2.pcNum);
    printf ("Name=%s\n",sStu2.pcName);
    printf ("Born=%d年",sStu2.dBirth.nYear);
    printf ("%d月",sStu2.dBirth.nMonth);
    printf ("%d日\n",sStu2.dBirth.nDay);
    printf ("Sex=%c\n",sStu2.cSex);
    printf ("Score=%.1f\n",sStu2.fScore);
} 

请问对结构体成员输出的时候为什么是sStu2.pcNum呢,以我对指针的理解,这里应该用是sStu2.(*pcNum),结构体里面不是定义的指针的形式吗,这个pcNum不就是个地址嘛,是如何做到把值输出的,大学生学不明白了

因为这是以 %s输出,即以字符串形式输出,直接传首地址就行了,然后printf 会往后一直输出,直到遇到结束符'\0',停止输出%s对应的字符串内容

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    其实在C语言中,结构体成员可以使用"."或"->"来访问。"->"符号用于访问结构体指针的成员。所以如果结构体是以指针方式传递的,则需要使用"->"符号来访问结构体的成员。而在这个问题中,sStu2并不是一个指针类型,所以可以使用"."符号来访问结构体成员。

    如果pcNum是一个指针类型的成员,那么可以使用""来访问它所指向的值,例如sStu2.pcNum。但如果pcNum是一个char类型的指针成员,则可以使用pcNum来访问它所指向的字符串。

    下面是一段示例代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct Student {
        int iNum;
        char *pcNum;
    } Student;
    
    int main() {
        Student sStu1 = { 1, "20180101" };
        Student *psStu2 = (Student*)malloc(sizeof(Student));
        psStu2->iNum = 2;
        psStu2->pcNum = "20180102";
    
        printf("sStu1.iNum=%d, sStu1.pcNum=%s\n", sStu1.iNum, sStu1.pcNum);
        printf("psStu2->iNum=%d, psStu2->pcNum=%s\n", psStu2->iNum, psStu2->pcNum);
    
        free(psStu2);
    
        return 0;
    }
    

    输出结果为:

    sStu1.iNum=1, sStu1.pcNum=20180101
    psStu2->iNum=2, psStu2->pcNum=20180102
    

    其中sStu1是一个非指针类型的结构体,可以使用"."符号来访问结构体成员;而psStu2是一个指向Student结构体的指针,需要使用"->"符号来访问结构体成员。在输出字符串类型的成员pcNum时,直接使用pcNum即可,因为pcNum已经是一个char指针类型的变量。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^