初识结构体

梦想不抛弃苦心追求的人,只要不停止追求,你们会沐浴在梦想的光辉之中。再美好的梦想与目标,再完美的计划和方案,如果不能尽快在行动中落实,最终只能是纸上谈兵,空想一番。只要瞄准了大方向,坚持不懈地做下去,才能够扫除挡在梦想前面的障碍,实现美好的人生蓝图。初识结构体,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

结构体:

  1. 结构体是一种构造数据类型
  2. 把不同类型的数据组合成一个整体

 1.结构体创建及初始化
 2.结构体成员变量的修改
 3.结构体传参

         3.1传值调用

         3.2传值调用

1.1struct为结构体关键字,Stu为结构体名,s为结构体变量

1.2结构成员的可以是标量、数组、指针,甚至是它的结构体

#include<stdio.h>

struct Stu
	{
		char name[20];//名字
		int age;//年龄
		char sex[5];//性别
		int hight;//身高
	};


int main(){
    struct Stu s = {"zhangsan", 20, "男", 180};//局部变量初始化
    printf("%s %d %s %d\n", s.name, s.age, s.sex, s.hight);//打印
}

初识结构体  

下面代码是结构体中成员是 结构体类型的例子(结构体嵌套),以及他的初始化操作和打印操作:

#include<stdio.h>

struct Point
{
	int x;
	int y;
};
struct S
{
	char c;
	struct Point p;
	double d;
	char str[20];
};

int main() {
	struct S ss = { 'x', {100, 200}, 3.14, "hehe" };//按照成员顺序依次赋值
	struct S s1 = {.d=3.14, .c = 'x', .p.x =100};//.成员可以不考虑顺序
	printf("%c %d %d %lf %s\n", ss.c, ss.p.x, ss.p.y, ss.d, ss.str);
	printf("%c %d %d %lf %s\n", s1.c, s1.p.x, s1.p.y, s1.d, s1.str);
}

初识结构体 

 

总结:

结构体成员初始化可以按顺序赋值,也可以用.成员名;

结构体内存在结构体的时候,初始化要加{}或.结构体名.成员


 二:成员变量复制之后要修改该怎么办呢?

#include<stdio.h>
#include<string.h>
struct S
	{
		char name[20];
		int age;
	};
	
	int main()
	{
		struct S s = {.age=20, .name = "zhansgan"};
		printf("%s %d\n", s.name, s.age);
		s.age = 30;//可以直接修改
		//*char*  对s.name解引用也不行,因为他只能操作一个字符
		//s.name = "linsensen";//error
		strcpy(s.name, "lingsensen");
		printf("%s %d\n", s.name, s.age);
	
		return 0;
	}

 初识结构体

 

总结:

当成员变量是数组的时候,不能直接修改 ,因为数组名是数组首元素的地址,是一个二进制序列,是一个数值。所以要用到strcpy()函数(函数详情可参考https://blog.csdn.net/m0_56177713/article/details/127731176?spm=1001.2014.3001.5502)


三:结构体传参

#include<stdio.h>
struct S
	{
		int data[1000];
		char buf[100];
	};
	
	//结构体变量.结构体成员名
	//结构体指针->结构体成员名
	
	void print1(struct S ss)
	{
		int i = 0;
		for (i = 0; i < 10; i++)
		{
			printf("%d ", ss.data[i]);
		}
		printf("%s\n", ss.buf);
	}
	
	void print2(struct S* ps)
	{
		int i = 0;
		for (i = 0; i < 10; i++)
		{
			printf("%d ", ps->data[i]);
		}
		printf("%s\n", ps->buf);
	}
	
	int main()
	{
		struct S s = { {1,2,3} , "hehe"};
		print1(s);//传值调用
		print2(&s);//传址调用
		return 0;
	}
	

初识结构体

总结:上面的print1和prinr2函数哪个好些?

答案是:首选print函数。
原因:
函数传参的时候, 参数是需要压栈的。

如果传递一个结构体对象的时候,结构体过大,参数压栈的系统开销比较大,所以会导致性能的下降。
结构体传参的时候,要传结构体的地址。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/153237.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!