初始结构体

只要你愿意 开始总比放弃好。 Roman.

愿我们都有自己的目标并正在为其不懈努力。

-----------------------------------------------------------------------

一、结构体的声明

一)结构的基础知识

结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。

二)结构体的声明

形如:

struct tag   // struct(关键字)+ 结构体标签

{

  member-list;  //成员变量

}variable-list;  //变量列表

例:

//结构体

struct Stu
{
    char name[20]; //名字
    int age; //年龄
    char sex[8]; //性别
    float score; //成绩
}s1,s2,s3;
// s1,s2,s3 是通过 struct Stu 类型创建的变量
// s1,s2,s3 是全局变量

// typedef 类型重定义/ 类型重命名

typedef struct Stu Stu;
// 此时可以用 Stu 代替 struct Stu

int main()
{
    // struct Stu 是结构体类型,不能随便省略 struct
    
    struct Stu s4;
    struct Stu s5;
    // s4,s5 是局部变量
    
    Stu s6;
    // typedef 后可以使用 Stu

    return 0;
}


// typedef 另一种方式

struct Stu
{
    char name[20]; //名字
    int age; //年龄
    char sex[8]; //性别
    float score; //成绩
}Stu;  // 此时此处只能写重命的名,不能写变量列表

 

三)结构体成员的类型

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

四)结构体变量的定义和初始化

 1.  结构体初始化用 大括号{ }

 2. 指针变量 放地址 or 放空指针NULL

------------------------------------------------------------------------------

二、结构体成员的访问

1. 结构成员访问操作符:

  •  结构体变量 . 结构体成员名
  • 结构体指针 -> 结构体成员名

 2.  实例:

// 结构体访问

struct Stu
{
	char name[20];
	int age;
};

void print(struct Stu* ps) {
	printf("name = %s   age = %d\n", (*ps).name, (*ps).age);
	//使用结构体指针访问指向对象的成员
	printf("name = %s   age = %d\n", ps->name, ps->age);
}

int main()
{
	struct Stu s = { "zhangsan", 20 };
	print(&s);//结构体地址传参
	return 0;
}

// 如果结构体有多层 则按照 指针-> or 变量. 进行访问即可

 3. 修改 结构体变量的成员内容

  • 成员普通: =(赋值)
  •  成员是数组: strcpy(  ,);  // 头文件 string.h

------------------------------------------------------------------------------

三、结构体传参

一)传 结构体变量

 传 结构体变量,即 值传递: 实参是形参的一份临时拷贝

  • 会浪费较大的空间
  • 通过函数改变形参内容时,实参不会改变,安全性较高

二)传 结构体指针

 传 结构体指针,即  址传递。

  • 只占 4/8 字节,空间较小
  • 为提高安全性,可在传参时形参前加上 const 修饰

三)小结

 函数传参时,参数是需要压栈的。

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

  • 每一次函数调用都要在内存的栈区开辟一块空间
  • 内存(从上到下):

栈区:局部变量、函数参数

堆区:动态内存开辟   如:malloc 、free 、calloc 、realloc

静态区:静态变量、全局变量

  • 小结: 结构体传参,要传 结构体地址

------------------------一个人所有的愤怒都来源于对自己无能的痛苦。------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

'Dream是普通小孩耶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值