零基础快乐学习C/C++——12

结构体

结构体的声明

//struct--结构体关键字 Stu--结构体标签 struct Stu 结构体类型
//定义一个结构体类型,不创建空间,类似于图纸
struct Stu
{
	char name = [20];
	short age;
	char tele[12];
	char sex[5];
}s1,s2,s3;//s1,s2,s3是三个全局的结构体变量

int main()
{

	//创建结构体变量,这时才占用空间,类似于图纸澡出来的房子
	struct Stu s;//局部变量
}
typedef struct Stu
{
	char name = [20];
	short age;
	char tele[12];
	char sex[5];
}Stu;

注意上面两种的区别请添加图片描述
第二种使用了tpyedef可以方便直接写Stu s1,而不用每次都写struct Stu s1

结构体变量的定义和初始化请添加图片描述

要知道是运用{}来完成结构体初始化的,如下面的例子

struct S
{
	int a;
	char c;
	char arr[20];
	double d;
};
struct T
{
	char ch[20];
	struct S s;
	char arr[20];
	char* pc;
};
int main()
{
	char arr[] = "hello,wold\n";
	struct T t = {"hehe",{100,'w',"hello",3.14},arr};
	printf("%s\n",t.ch);
	printf("%s\n",t.s.arr);
	return 0;
}

结构体成员的访问

typedef struct Stu
{
	char name = [20];
	short age;
	char tele[12];
	char sex[5];
}Stu;

void print1(Stu tmp)
{
	printf("name:%s\n",tmp.name);
	printf("name:%s\n",tmp.age);	
	printf("name:%s\n",tmp.tele);
	printf("name:%s\n",tmp.sex);
}

void print2(Stu* ps)
{
	printf("name:%s\n",ps->name);
	printf("name:%s\n",ps->age);	
	printf("name:%s\n",ps->tele);
	printf("name:%s\n",ps->sex);
}

int main()
{
	Stu s = {"jack",40,"13132131","男"};
	print1(s);
	print2(&s);
	return 0;
}

用来打印结构体数据,哪个函数更好呢?
pirnt2,理由如下
print1函数 实参会开辟空间创建,同时传递给形参时,也会开辟空间,造成了空间浪费,而print2传参的时候传入的是地址,无非是4个字节活着8个字节(32位or64位)

两种访问方式

  1. 用.访问 结构体变量
  2. 用-> 结构体指针

请添加图片描述
函数穿参压栈是什么意思
请添加图片描述
每一次调用函数都会在栈上申请空间请添加图片描述
请添加图片描述
注意穿参是从右往左传,所以先b‘,再a’

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在这个问题中,用户提供了两段代码,分别是引用\[1\]和引用\[2\]。这两段代码都是用来在一个数组中查找指定数的位置。 引用\[1\]是一个C++代码示例,它使用了iostream和stdio.h头文件,并使用了命名空间std。代码中使用了一个while循环来不断读取输入的n值,然后创建一个大小为n的整型数组a,并通过for循环读取数组的元素。接下来,代码读取了一个整数m,并使用for循环遍历数组a,查找是否有与m相等的元素。如果找到了相等的元素,则将其位置赋值给变量t,并跳出循环。最后,根据t的值输出结果。 引用\[2\]是另一个C代码示例,它使用了stdio.h头文件。代码中同样使用了一个while循环来不断读取输入的n值,然后创建一个大小为n的整型数组a,并通过for循环读取数组的元素。接下来,代码读取了一个整数m,并使用for循环遍历数组a,查找是否有与m相等的元素。如果找到了相等的元素,则将其位置赋值给变量count,并将flag设置为1,表示找到了。最后,根据flag的值输出结果。 综上所述,这两段代码都是用来在一个数组中查找指定数的位置。它们的实现方式略有不同,但都能达到相同的目的。 #### 引用[.reference_title] - *1* [1143: 零起点算法50——数组中查找数](https://blog.csdn.net/weixin_43965597/article/details/113104995)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [问题 C: 零起点算法82——数组中查找数](https://blog.csdn.net/chenhannan0024/article/details/127568844)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值