C语言结构体的使用
1、先声明在定义
#include<stdio.h>
#include<string.h>
struct student{
char name[20];
int age;
double score;
};
int main(){
struct student st;
struct student *stt=&st;
strcpy(st.name,"zhangsan");
//通过地址赋值
(&st)->age=18;
stt->score=97.8;
printf("name=%s\tage=%d\tscore=%f\n",st.name,st.age,st.score);
return 0;
}
输出:
name=zhangsan age=18 score=97.800000
访问结构体对象内部成员变量的方法:
A.结构体普通变量通过"."来访问内存的成员属性。
B.结构体指针变量通过"->"来访问内存的成员属性。
2、在声明类型的同时定义变量
struct 结构体名{
数据类型 变量名1;
数据类型 变量名2;
数据类型 变量名3;
...
}变量名列表
;
例如:struct student
{ char name[20];
int id;
int score;
}st,*sp;
3、省略结构体名,直接定义变量
struct {
数据类型 变量名1;
数据类型 变量名2;
数据类型 变量名3;
...
}变量名1,变量2,变量3...;
注:此种方法,只能在变量名列表的位置定义变量,其他位置不能定义变量。
补充:给结构体赋初始值
struct {
char name[20];
int id;
int score;
}st1 = {"rose",2,100};
4、关于结构体内存地址的计算方法
结构体成员的存放规则:
<1>结构体成员的相对偏移[成员偏移结构体首地址的字节数] % 本身位置偏移 == 0, 不满足则补齐,直到可以为0
<2>最后结构体总大小 % 最大成员的位置偏移 == 0,不满足则补齐,直到可以为0注:不遵从规则需要补齐,直到满足我们的上述关系位置
#include <stdio.h>
struct student
{ char name[5];
int id;
short score;
};
void output_student(struct student *sp){
printf("sizeof(sp) = %d\n",sizeof(sp)); printf("NAME\tID\tSCORE\n");
printf("%s\t%d\t%d\n",sp->name,sp->id,sp->score);
}
int main(){
struct student st = {"jack",1,80};
printf("sizeof(st) = %d\n",sizeof(st));
//传递结构体的地址,节省空间
output_student(&st);
return 0;
}
输出结果:
sizeof(st) = 16
sizeof(sp) = 4
NAME ID SCORE
jack 1 80