重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
C语言结构体定义:struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。
创新互联公司是专业的桥东网站建设公司,桥东接单;提供成都做网站、成都网站制作、成都外贸网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行桥东网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
结构体是C语言中聚合数据类型(aggregatedatatype)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
扩展资料
1、struct是声明结构体类型时必须使用的关键字,不能省略。“结构体”这个词是根据英文单词structure译出的。
2、structSTUDENT是定义的数据类型的名字,它向编译系统声明这是一个“结构体类型”,包括name、num、sex、age、score、addr等不同类型的项。
3、structSTUDENT与系统提供的int、char、float、double等标准类型名一样,都是数据类型,具有同样的作用,都是用来定义变量的。
参考资料来源:百度百科—结构体
指向结构体成员运算符 : (-) 从外部看是包含了一个解指针(*)所以要对指针进行操作
例如:
typedef struct
{
int data[20];
int length;
}Sqlist;
Sqlist
*L;
L-lenth;
//同样是得到L中length的值
结构体成员运算符 : ( . )直接调用结构体中的某个成员
例如:
typedef struct
{
int data[20];
int length;
}Sqlist;
Sqlist L;
L.length; //直接调用L中length的值
L.data[3];
扩展资料:
结构体成员的点运算符(.)和箭头运算符(-)的区别:
相同点:两个都是二元操作符,其右操作符是成员的名称。
不同点:点操作符左边的操作数是一个“结果为结构”的表达式;箭头操作符左边的操作数是一个指向结构的指针。
如果一个函数的传入参数是结构体,且需要该结构体作为返回值的时候,必须采用指针传递的方式,其中对结构体赋值必须使用箭头运算符。
参考资料:
百度百科--
菜鸟教程-C++ 运算符
改动如下:
#include stdio.h
#includestring.h
enum gender
{
male,famale
};
typedef struct course
{
char coursename[10];
int coursescore;
}STC;
typedef struct student
{
long studentnumber;
char name[20];
int age;
enum gender sex;
STC coursescore[3];
struct student *next;
void (*ptooutput)(struct student*); // 改动1:改成指针,与output函数匹配
}STD;
void output(struct student *p)
{
int i;
printf("学生%s:\n",p-name);
printf("他的学号是%ld\n",p-studentnumber); // 改动2:学号
printf("他的年龄是%d\n",p-age); // 改动3:年龄
if(p-sex==0)
{printf("他的性别是男\n");}
else
{printf("他的性别是女\n");}
for(i=0;i3;i++)
{
printf("他的%s",p-coursescore[i].coursename);
printf("成绩是%d\n",p-coursescore[i].coursescore);
}
}
main()
{
STD a;
a.studentnumber=1011110201;
strcpy(a.name,"叶超");
a.age=19;
a.sex=male;
strcpy(a.coursescore[0].coursename,"数学");
a.coursescore[0].coursescore=87;
strcpy(a.coursescore[1].coursename,"英语");
a.coursescore[1].coursescore=72;
strcpy(a.coursescore[2].coursename,"C语言");
a.coursescore[2].coursescore=66;
a.ptooutput = output; // 改动4:设置打印函数指针
a.ptooutput(a); // 改动5:输入参数为指针
}
指针就是指向内存的某个地址的一个变量。
结构体指针就是这个指针变量的值必须指向存放该结构体的内存位置。
当这个指针没有任何指向时,可以赋值为null值,但是改指针不可使用,程序中应该做判断。下面是一些赋值演示。
struct student{
int id;
int score;
} aaa;
struct student *p = null;//结构体指针p初始化赋值为null
struct student *p2=aaa;//p2指向aaa
struct student *p3=(struct student *)malloc(sizeof(struct student));//内存中申请一个结构体空间,并将地址强制转换为结构体指针变量赋值给p3