c c struct - yaokun123/php-wiki GitHub Wiki
结构体是复合类型,把多个相同或不同类型的数据存放在一块连续的内存中
定义结构体时,它只是一个类型(模版),没有空间,不可以给结构体成员赋值
//关键字 struct 代表这是一个结构体类型
//stu是这个结构体的名字
//整个结构体的类型是struct stu
struct stu{
int id;
int age;
char name[128];
};
定义结构体同时定义变量
struct stu{
int id;
int age;
char name[128];
} a,b;//定义类型时,同时定义了两个结构体变量struct stu a,b;
通过结构体变量操作成员,使用点域.操作
通过结构体地址操作成员,使用->
#include<stdio.h>
#include<string.h>
struct stu{
int id;
int age;
char name[128];
};
int main(){
struct stu a = {//全部成员初始化
1,
20,
"test"
};
struct stu b = {//给部分成员初始化,其他成员内容为0
.age = 18
};
//通过结构体变量操作成员,使用点域.操作
struct stu c;
c.age = 28;
c.id = 520;
//c.name = "haha";//数组名是一个常量,不能这么赋值
strcpy(c.name,"haha");
printf("%d %d %s\n",c.id,c.age,c.name);
//通过结构体地址操作成员,使用->
struct stu d;
(&d)->id = 100;
(&d)->age = 18;
strcpy((&d)->name,"hello world");
printf("%d %d %s\n",(&d)->id,(&d)->age,(&d)->name);
return 0;
}
相同类型的变量是可以相互赋值的
#include<stdio.h>
#include<stdio.h>
#include<string.h>
struct stu{
int id;
int age;
char name[128];
};
struct h_stu{
struct stu s;
char subject[128];
};
int main(){
struct stu a = {1,20,"hello"};
struct stu b;
b = a;//相同类型的变量是可以相互赋值的,其实就是调用memcpy
printf("%d %d %s",b.id,b.age,b.name);
return 0;
}
是一个数组,数组中的每个元素都是结构体
#include<stdio.h>
#include<string.h>
struct stu{
int id;
int age;
char name[128];
};
int main(){
struct stu num[5] = {{1,18,"test1"},{2,20,"test2"},{3,22,"test3"},{4,24,"test4"},{5,26,"test5"}};
printf("%lu %lu\n",sizeof(num),sizeof(num[0]));//680 136这里不是单纯的4+4+128,还涉及到结构体的内存对齐问题
for(int i = 0; i < sizeof(num)/sizeof(num[0]); i++){
printf("%d %d %s\n",num[i].id,num[i].age,num[i].name);
}
return 0;
}
#include<stdio.h>
#include<string.h>
struct stu{
int id;
int age;
char name[128];
};
struct h_stu{
struct stu s;
char subject[128];
};
int main(){
struct h_stu h;
h.s.id = 1;
h.s.age = 22;
strcpy(h.s.name,"helloworld");
strcpy(h.subject,"php");
printf("%d %d %s %s",h.s.id,h.s.age,h.s.name,h.subject);
return 0;
}
#include<stdio.h>
#include<string.h>
struct stu{
int id;
int age;
char name[128];
};
struct h_stu{
struct stu s;
char subject[128];
};
int main(){
struct stu a = {1,20,"hello"};
struct stu *p = &a;//结构体指针
printf("%d %d %s\n",p->id,p->age,p->name);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct tea{
int id;
char *p;
};
int main(){
struct tea tmp;
printf("%lu\n",sizeof(tmp));//16
struct tea *p = (struct tea *)malloc(sizeof(struct tea));
p->id = 1;
//p->p = "hello";//或
p->p = (char *)malloc(sizeof(char));
strcpy(p->p,"hello");
printf("%d %s\n",p->id,p->p);
return 0;
}
------------------------------------------------------------------------
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct t{
int a;
};
struct tea{
int id;
char *p;
struct t *k;
};
int main(){
struct tea *p = (struct tea *)malloc(sizeof(struct tea));
p->p = (char *)malloc(sizeof(char));
strcpy(p->p,"hello");
p->k = (struct t *)malloc(sizeof(struct t));
p->k->a = 100;
return 0;
}