结构体
结构体指的是一种数据结构是C语言中复合数据类型的一类。
结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。
结构体同时也是一些元素的集合,这些元素称为结构体的成员,且这些成员可以为不同的类型,成员一般用名字访问。
定义结构体变量
1.
struct 结构体名
{ 类型标识符 成员名;
类型标识符 成员名;
......
};
struct 结构体名 变量名表列;
2.
struct 结构体名
{ 类型标识符 成员名;
类型标识符 成员名;
......
}变量名表列;
3.
struct
{ 类型标识符 成员名;
类型标识符 成员名;
......
}变量名表列;
结构体变量初始化
实例
所占内存
结构体类型不占用内存,但结构体变量占用内存。
使用sizeof运算,可以求出运算对象所占的内存空间的字节数目。
sizeof(变量或类型说明符)
结构体指针
struct stuinf
{ int stid;
int score;
}stu [ STNUM ];
struct stuinf * p[STNUM]; 定义结构体指针
for ( i=0; i<=STNUM-1; i++ )
p[i]=&stu[i] 让他指向结构体变量;
(*p[i]).stid 等同于 p[i]->stid 等同于 stu(i).stid
结构体排序
定义结构体,再定义一个结构体指针指向这个结构体,通过指针取结构体内部一变量进行排序,改变指针指向,最后按序输出指针所指内容。
#define STNUM 10
struct stuinf
{ int stid;
int score;
}stu [ STNUM ];
struct stuinf * p[STNUM];
int main ( )
{
struct stuinf * ptemp, * p[STNUM];
int i,j,k;
for ( i=0; i<=STNUM-1; i++ )
{
scanf ("%d%d", &stu[i].stid,&stu[i].score);
p[i]=&stu[i];
}
for ( i =0; i <= STNUM-2; i++ )
{
k = i;
for ( j = i; j <= STNUM-1; j++ )
if ( (*p[k]).score < (*p[j]).score ) //按照指针p所指的结构体中的score进行排序
k=j;
if ( k != i )
{ ptemp = p[i]; p[i]=p[k]; p[k]=ptemp; } //p的指向变了,但是所指向的结构体变量内部没变
}
for (i=0; i<=STNUM-1; i++)
printf("%d,%d\n", (*p[i]).stid, p[i]->score);
}
就酱,啾咪~