结构体初阶知识

思维导图:

 


1.结构体出现的必要:

假如你要定义一个变量来表示体重,你只要这样:int weight=0;就行了。

假如你要存一串字符你只要定义一个字符数组:char C[20];就行了。

但是,当你要定义一个变量来表示一本书的信息呢?这本书的作者名字,价格等都是一些不同类型的变量啊。在这时就需要一个能够表示不通过类型变量的类型出现了。所以结构体就因为这个需要而出现了。

2. 结构体变量的声明,定义,初始化:

2.1声明:

声明:

struct tag
{
member - list ;
} variable - list ;

举个例子:

struct BOOK {
	char name[20];
	int price;
};

 

上面的例子便是表明我声明了一个结构体struct BOOK,这个结构体内部有它要表示的内容name还有price.

2.2 定义:

第一种方式:

struct BOOK {
	char name[20];
	int price;
}s1;

 第二种方式:

struct BOOK {
	char name[20];
	int price;
};
struct BOOK s2;

第三种方式:

struct BOOK {
	char name[20];
	int price;
};
int main() {
	struct BOOK s3;
}

 其中,s1和s2是全局变量,s3是局部变量。

假如你要偷懒的话,不想写struct便定义一个结构体变量要怎么做呢?

小牛儿有办法:

typedef struct BOOK {
	char name[20];
	int price;
}BOOK;//用typedef关键字将struct BOOK重新定义为BOOK
int main() {
	BOOK s3;
}

2.3初始化:

第一种:

typedef struct BOOK {
	char name[20];
	int price;
}BOOK;
int main() {
	BOOK s3= { "C语言",25 };//定义并初始化
}

第二种: . +成员名

typedef struct BOOK {
	char name[20];
	int price;
}BOOK;
int main(){
	BOOK s4 = { .name = "C语言",.price = 25 };//用这种方式就可以避免顺序的限制
}

3结构体变量的访问 

结构体变量的访问方式有两种。一种是(.),另一种是(->)。

第一种方式是通过变量名+.来访问的,第二种方式是必须通过指针来访问的(也就是结构体内要有指针变量)。

现在通过来演示一下。

#include<stdio.h>
struct book {
	char name[20];
	int page;
	float price;
};
int main() {
	struct book s1={"C语言程序设计",200,14.00 };//初始化
	printf("《%s》,%d,%f", s1.name, s1.page, s1.price);//通过变量名+.的方式进行访问。
	return 0;
}

如果用上指针的话,就可以用指针+->的方式访问了。比如:

#include<stdio.h>
struct book {
	char name[20];
	int page;
	float price;
};
int main() {
	struct book s1={"C语言程序设计",200,14.00 };//初始化
	printf("《%s》,%d,%f", s1.name, s1.page, s1.price);//通过变量名+.的方式进行访问。
	printf("\n");
	struct book* p = &s1;//定义一个指针变量
	printf("《%s》,%d,%f", p->name, p->page, p->price);//通过指针+->来进行打印。
	return 0;
}

3.结构体传参

在学习函数的时候我们知道函数传参有两种形式,一种是数值传参,一种是地址传参。

其实结构体的传参方式也是有这两种的,现在我们就来看一下吧:

3.1数值传参:

#include <stdio.h>
struct key {
	int num;//声明一个结构体变量
};
struct key input = { 888888 };//定义一个结构体变量并初始化
int print1(struct key input) {//传一个结构体并打印
	printf("%d", input.num);
}
int main() {
	print1(input);
	return 0;
}

	

3.2地址传参:

#include <stdio.h>
struct key {
	int num;//声明一个结构体变量
};
struct key input = { 888888 };//定义一个结构体变量并初始化


int print2(struct key* p) {//定义一个接收指针并打印函数print2
	printf("%d", p->num);
}
int main() {
	print1(input);
	print2(&input);
	return 0;
}

虽说结构体传参也有两种方式,但是我们在传参时一般会选择传地址,因为传地址可以省空间。

比如:你定义了一个有100个空间的数组arr[100],

但是只有10个空间被赋值arr[100]={1,2,3,4,5,6,7,8,9,10}.

在这里如果你使用传数值的方式的话就会有大量空间浪费了。

但是如果使用传址的方式的话就省了很多空间了。

结语:

好了,今天的分享就到这里了。如果有错误的话请各位看官多多指正哦。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值