【C】让你瞬间理解结构体

1、结构体的理解

结构体就是一些值的集合,这些值称为成员变量.

用白话说:存放值的仓库,里面的值随取随用。(够简单)

 2、结构体的声明

3、结构体的定义 

第一种方式:

struct sq
{
	int a;
	int b;
	char c;
	float d;
	int arr1[10];
	char  arr2[10];
};

struct sq s;//s为结构体变量
//struct sq为结构体类型

第二种方式:

struct sq
{
	int a;
	char c;
	
}s1,s2;//定义了s1,和s2

第三种方式:

struct       //没有标签直接定义变量
{
	int a;
	char c;
	
}s1,s2;

(第三种方式的结构体只能用一次,用完即弃)

注意:1.结构体要定义在主函数之上

           2.结构体没地址,结构体变量才有地址

4、结构体的使用

4.1结构体的初始化(赋值)

第一种方式:

struct sp
{
	int a;
	char c;
	char* cp;
	
}s1 = { 1,'a',"YYDS" };//<-----

第二种方式:

struct sp
{
	int a;
	char c;
	char* cp;

};

struct sp s = { 1,'a',"永远的神" };//<------

第三种方式:

struct sp
{
	int a;
	char c;
	char* cp;

};

struct sp s;

int main() {
	s.a = 1;
	s.c = 'a';
	s.cp = "看不懂没关系,之后会讲";//<-------
    return 0;
}

4.2结构体的成员访问

struct sp
{
	int a;
	char c;
	char arr[40];

};
int main() {
	struct sp s = { 123,'C',"结构体成员用“.”访问" };
	s.a = 10076;
	scanf("%c" ,&s.c);
	printf("%s", s.arr);
	

    return 0;
}

5、结构体数组

储存结构体的数组

 

#include <stdio.h>

struct sp
{
	int a;
	char c;
	char arr[40];



}cla[];//也可以在这定义
// [] 中数字可以省略

        
struct sp cla[] = { {1,'a',"aaa"},{2,'b',"bbb"},{3,'c',"ccc"},
						{4,'d',"ddd"},
						{5,'e',"eee"} };

int main() {
	
    cla[1].a = 10;
    printf("%d", cla[1].a);
    return 0;
}

 6、结构体指针

6.1结构体指针的定义

struct sp
{
	int a;
	char c;
	char arr[40];

}q;

struct sp* p = &q;

也能这样:

struct sp
{
	int a;
	char c;
	char arr[40];

}q,*p=&q;//*p指向q(结构体变量)

6.2指针访问结构体成员

struct sp
{
	int a;
	char c;
	char arr[40];

}q;

struct sp* p = &q;

int main() {
	p->a = 10;
	p->c = 'A';

	gets(p->arr);// gets() 的作用是输入字符串复制给 p->arr 
	printf("%s", p->arr);
    return 0;
}

6.2指向结构体数组的指针 

struct sp
{
	int a;
	char c;
	char arr[40];

}q[4] = { { 1,'a',"aaa" },{2,'b',"bbb"},
	{3,'c',"ccc"},{4,'d',"ddd"}};

struct sp* p = &q;

int main() {
    //其实就是指针访问数组

	p[0].a = 100;
	p[2].c = 's';
    return 0;
}

7、typedef关键字的使用

typedef用来定义新的数据类型。

简单点说:给结构体类型起别名

typedef struct sp
{
	int a;
	char c;
	char arr[40];

};

typedef struct sp qlis;//给struct sp类型起个别名,叫qlis

int main() {

    //下面的 q 和 struct sp 是相等的
	qlis sz1;
	struct sp sz2;

    return 0;
}

 也可以这样写:

typedef struct sp
{
	int a;
	char c;
	char arr[40];

}qlis;//把别名qlis放在这里

8.结构体嵌套结构体 

typedef struct sp
{
	int a;
	char c;
	char arr[40];
	struct spp//就是结构体套娃
	{
		int a;
		char c;
		
	}s;

}qlis;

int main() {
	qlis p;
	p.s.a = 10;
	p.s.c = 's';
	
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值