C语言 结构体

结构体本质上就是一种"自定制类型"

#include<stdio.h>

//struct 就是一个关键字
//Student 这是结构体的名字(自己创建的类型的名字)
struct Student{
	//{ }里面放置结构体的"成员"
	int id;
	char name[1024];
};

int main() {
	//这个代码就是创建了一个变量,名字叫student
	//这个变量的类型就是struct Student
	struct Student student = {10,"zhangsan" };//10 对应 id , zhangsan 对应 name
	//创建变量 并进行初始化
	return 0;
}

当我们创建一个结构体的时候, 结构体里面的"成员"到底要放什么.

创建自定制类型时, 我们是希望通过这个代码,对现实中的问题进行抽象.

抽象和具体之间本质的区别在于"信息量的多少"
抽象的过程 不能脱离实际的问题场景!!
必须要根据实际的场景来决定提取哪些信息到代码中!!

创建结构体变量的时候可以使用{ }语法进行初始化, 但是不能使用{ }进行赋值.

只能针对结构体每个成员进行赋值.

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>

struct Student{
	int id;
	char name[1024];
};

int main() {
	struct Student student = {10,"zhangsan" };
	student.id = 20;//.是成员访问运算,翻译成中文相当于"的"
	strcpy(student.name,"lisi");  // string.h
	//student.name[0] = 'l';
    //student.name[1] = 'i';
	//student.name[2] = 's';
    //student.name[3] = 'i';
	//student.name[4] = '\0';
	printf("%d\n",student.id);
	printf("%d\n",student.name);
	return 0;
}
//除了.之外,还有一种成员访问操作,->
//如果当前的变量是一个结构体指针,使用->来访问成员.
#include<stdio.h>
#include<string.h>

struct Student {
	int id;
	char name[1024];
};

int main() {
	struct Student student = {10,"zhangsan" };
	struct Student* p = &student;
	printf("%d\n",p->id);
	//printf("%d\n",(*p).id);
	return 0;
}

结构体作为函数参数

#include<stdio.h>

struct Student{
	int id;
	char name[1024];
};

void printStudent(struct Student s){
	s.id = 20;
	printf("%d\n",s.id);
	printf("%s\n",s.name);
}

int main(){
	struct Student student = { 10, "张三"};
	printStudent(student);
	printf("%d\n",student.id);
	return 0;
}
#include<stdio.h>

struct Student{
	int id;
	char name[1024];
};

void printStudent(struct Student* s){
	s->id = 20;//(*s.id)=20;
	printf("%d\n",s->id);
	printf("%s\n",s->name);
}

int main(){
	struct Student student = { 10, "张三"};
	printStudent(&student);
	printf("%d\n",student.id);
	return 0;
}

在C语言中,如果结构体传参,使用指针类型.
形参是实参的拷贝.
int,double,拷贝开销是非常小的,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值