#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对应的字符串内容
不知道你这个问题是否已经解决, 如果还没有解决的话:其实在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指针类型的变量。