结构体与结构体指针
- 结构体定义与使用
- 结构体指针与动态内存开辟
- 结构体数组
- 结构体与结构体指针取别名
结构体定义与使用
//java/kotlin有类的概念,C语言 函数 结构体(相当于java中的类)
struct Dog{
//成员
char name[10];
int age;
char sex;
};//必须给写;
int main(){
struct Dog dog;//当前这行代码写完,没有初始化的时候,成员默认值是系统值
//赋值操作
//dog.name = "旺财";这是java的写法,在c中必须使用copy的api
strcpy(dog.name,"旺财");
dog.age = 3;
dag.sex = 'G';
printf("name:%s,age:%d,sex:%c n",dog,name,dog.age,dog.sex);
return 0;
}
//第二种
struct Person{
//成员
char * name;
int age;
char sex;
}ppp = {"abc",33,'M'}
ppp2,
ppp3,
ppp4
;//必须给写;
int main(){
// Person == ppp == struct Person ppp;
printf("name:%s,age:%d,sex:%c n",ppp ,name,ppp.age,ppp.sex);
//赋值
// strcpy(ppp4.name,"aaa");会失败,因为定义的是指针
ppp3.name = "adcd";
ppp4.age = 3;
ppp4.sex = 'G';
printf("name:%s,age:%d,sex:%cn",ppp4,name,ppp4.age,ppp4.sex);
return 0;
}
//第三种
struct Sutdy{
char * studyContext;
};
struct Student{
char name[10];
int age;
char sex;
struct StUDY STUDY;
struct Wan{
char * wanContext;
} wan;
};
int main(){
struct Student student = {"李元霸",88,'m',
{"学习c"},
{"王者荣耀"}
};
printf("name:%s,age:%d,sex:%c,study:%s,wan:%s n",student,name,
student.age,student.sex,student.sudyu.studyConent,student.wan.wanContent);
return 0;
}
结构体指针与动态内存开辟
struct Cat{
char name[10];
int age;
};
int main(){ //栈
// 结构体
struct Cat cat = {"小花猫",2};
//结构体指针 -> 调用一级指针成员
struct Cat * carp = &cat;
catp->age = 3;
strcpy(catp->name,"小花猫2");
printf("name:%s,age:%d n",catp->name,catp->age);//输出name:小花猫2,age:3
return 0;
}
struct Cat{
char name[10];
int age;
};
int main(){ //堆
struct Cat * cat = malloc(sizeof(strcut Cat));
strcpy(cat->name,"金色猫");
cat->age = 5;
printf("name:%s,age:%d n",cat->name,cat->age);//输出name:金色猫,age:5
if(cat){
free(cat);
cat = NULL;
}
return 0;
}
结构体数组
struct Cat{
char name[10];
int age;
};
int main(){
strcut Cat cat[10]={
{"abcd",1}
{}
{}
{}
{}
{}
{}
{}
{}
{}
};
struct Cat cat9 = {"小花猫9",9};
cat[9] = cat9;// *(cat + 9) = cat9;
printf("name:%s,age:%d n",cat9->name,cat9->age);
//堆区 动态范畴
struct Cat * cat2 = malloc(sizeof (struct cat) * 10);
// 如果现在立刻给cat2赋值,是哪个元素呢? 默认指向首元素
strcpy(cat2->name,"adfa");
cat2.age = 1;
printf("name:%s,age:%d n",cat2->name,cat2->age);
//给第8个元素复制
cat2+=7;
strcpy(cat2->name,"adfa");
cat2.age = 1;
printf("name:%s,age:%d n",cat2->name,cat2->age);
return 0;
}
结构体与结构体指针取别名
struct Workder_{
char name[10];
int age;
char sex;
};
//一定要加typedef,别名跟结构体名字一样,是为了兼容,
typedef struct Workder_;
typedef Workder_ * workder;
//还可以这样,定义结构体跟取别名一气呵成
typedef struct{
char name[10];
int age;
char sex;
} AV;
// 枚举 int 类型
enum CommentType {
TEXT = 10,
TEXT_IMAGE,
IMAGE
};
int main(){
//这里就不要struct了
Workder worker = malloc(sizeof(workder_));
//以前是
struct Workder_ workder1 = malloc(sizeof (struct Workder_));
//现在
Workder_ workder2 = malloc(sizeof (Workder_));
AV av = {};
AV * avp = malloc(sizeof (AV));
// Clion写法
enum CommentType commentType = TEXT;
//vs
CommentType commentType = TEXT;
return 0;
}