当前位置: 首页 > wzjs >正文

物流公司网站方案百度电脑版下载安装

物流公司网站方案,百度电脑版下载安装,wordpress代码优化插件,网站设计平台及开发工具结构体C语言结构体详解1. 结构体的声明2. 结构体的定义(1)结构体定义与变量的区别(2)结构体嵌套​3. 结构体的初始化​4. 结构体成员的访问​(1)通过结构体变量访问(.操作符)​&…

结构体

  • C语言结构体详解
    • 1. 结构体的声明
    • 2. 结构体的定义
      • (1)结构体定义与变量的区别
      • (2)结构体嵌套​
    • 3. 结构体的初始化​
    • 4. 结构体成员的访问​
      • (1)通过结构体变量访问(.操作符)​
      • (2)通过结构体指针访问(->操作符)​
      • (3)两种访问方式的使用场景​
    • 5. 结构体传参​
      • (1)传值调用​
      • (2)传地址调用​
      • (3)两种传参方式的对比​
    • 6. 一句话总结​

C语言结构体详解

1. 结构体的声明

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

声明格式

struct 结构体名 {成员变量类型 成员变量名;// 更多成员变量...
};

示例:声明一个学生结构体

// 声明学生结构体
struct Student {char name[20];  // 姓名int age;        // 年龄float score;    // 成绩
};

用结构体实例化的两种情况:​

  1. 声明结构体后实例化
struct Student {char name[20];int age;float score;
};// 实例化结构体变量
struct Student stu1;
struct Student stu2;
  1. 声明结构体的同时实例化
struct Student {char name[20];int age;float score;} stu1, stu2;  // 声明时直接实例化变量

2. 结构体的定义

(1)结构体定义与变量的区别

  • 结构体定义:描述结构体的组成,不分配内存空间
  • 结构体变量:根据结构体定义创建的具体实例,会分配内存空间

示例

// 结构体定义(不占空间)
struct Book {char title[50];float price;int page;
};// 结构体变量(占空间)
struct Book b1;  // 分配内存,大小为50 + 4 + 4 = 58字节(不考虑内存对齐)

(2)结构体嵌套​

结构体的成员可以是另一个结构体。​

示例:​

// 声明日期结构体​
struct Date {int year;int month;int day;};​
​
// 声明图书结构体,嵌套日期结构体​
struct Book {char title[50];float price;struct Date publish_date;  // 嵌套结构体作为成员​
};​
​
// 实例化嵌套结构体变量​
struct Book b1;

3. 结构体的初始化​

使用{}对结构体变量进行初始化,顺序与结构体成员声明顺序一致。​

示例1:基本初始化

struct Student {char name[20];int age;float score;};​\\完全初始化​
struct Student stu1 = {"张三", 18, 90.5f};​
​\\不完全初始化(未初始化的成员自动为0或空)​struct Student stu2 = {"李四", 19};  // score默认为0.0f

示例 2:嵌套结构体初始化

struct Date {int year;int month;int day;
};struct Book {char title[50];float price;struct Date publish_date;
};// 嵌套初始化,内部结构体用{}包裹
struct Book b1 = {"C语言教程", 39.9f, {2023, 10, 15}};

示例 3:指定成员初始化(C99 支持)

struct Student stu = {.age = 20,.name = "王五",  // 可以不按声明顺序.score = 88.0f
};

4. 结构体成员的访问​

(1)通过结构体变量访问(.操作符)​

当直接使用结构体变量时,用.操作符访问成员。​

格式结构体变量名.成员名

示例:​

struct Student {char name[20];int age;float score;};​
​
int main() {struct Student stu = {"张三", 18, 90.5f};​​// 使用.操作符访问成员​printf("姓名:%s\n", stu.name);printf("年龄:%d\n", stu.age);​​// 修改成员值​stu.age = 19;​stu.score = 92.0f;printf("修改后年龄:%d\n", stu.age);return 0;}

(2)通过结构体指针访问(->操作符)​

当使用结构体指针时,用->操作符访问成员。​

格式结构体指针->成员名

示例:​

struct Student {char name[20];int age;float score;};​
​
int main() {struct Student stu = {"张三", 18, 90.5f};struct Student *p = &stu;  // 定义结构体指针,指向stu​// 使用->操作符访问成员​printf("姓名:%s\n", p->name);printf("年龄:%d\n", p->age);​​// 修改成员值​p->age = 19;​p->score = 92.0f;printf("修改后年龄:%d\n", p->age);return 0;}

等价写法:(*指针变量).成员名

printf("姓名:%s\n", (*p).name);  // 与p->name等价

(3)两种访问方式的使用场景​

  • .操作符:适用于直接操作结构体变量的场景,代码更简洁直观​
  • ->操作符:适用于通过指针操作结构体的场景,尤其在函数传参为结构体指针时使用​

    示例:函数中访问结构体成员
// 使用.操作符(需要结构体变量)​
void print_stu(struct Student s) {printf("姓名:%s,年龄:%d\n", s.name, s.age);}​
​
// 使用->操作符(需要结构体指针)​
void print_stu_ptr(struct Student *p) {printf("姓名:%s,年龄:%d\n", p->name, p->age);}

5. 结构体传参​

结构体传参分为传值和传地址两种方式。​

(1)传值调用​

将结构体变量作为参数传递,函数内部会创建一个结构体副本。​

示例:​

struct Student {char name[20];int age;float score;};​
​
// 传值调用,接收结构体变量​
void modify_stu(struct Student s) {​s.age = 20;  // 仅修改副本,不影响原变量​s.score = 95.0f;}​
​
int main() {struct Student stu = {"张三", 18, 90.5f};modify_stu(stu);  // 传结构体变量​printf("年龄:%d\n", stu.age);  // 输出18,原变量未被修改​return 0;}

特点:​

  • 函数内部修改不会影响原结构体变量​
  • 传递大结构体时,会占用较多内存和时间(拷贝整个结构体)

(2)传地址调用​

将结构体指针作为参数传递,函数内部通过指针访问原结构体。​

示例:​

struct Student {char name[20];int age;float score;};​
​
// 传地址调用,接收结构体指针​
void modify_stu_ptr(struct Student *s) {​s->age = 20;  // 通过指针修改原变量​s->score = 95.0f;}​
​
int main() {struct Student stu = {"张三", 18, 90.5f};modify_stu_ptr(&stu);  // 传结构体地址​printf("年龄:%d\n", stu.age);  // 输出20,原变量被修改​return 0;}

特点:​

  • 函数内部修改会影响原结构体变量​
  • 仅传递 4 字节(32 位系统)的指针,节省内存和时间​
  • 更推荐使用的传参方式,尤其对于大型结构体

(3)两种传参方式的对比​

传参方式实现方式内存占用能否修改原结构体适用场景
传值调用传递结构体变量整个结构体大小不能小型结构体,无需修改原结构体
传址调用传递结构体指针4字节(32位所有场景,尤其大型结构体

推荐做法:优先使用传地址调用,既节省资源,又能灵活控制是否修改原结构体(如需保护原结构体,可在函数参数前加const)。​

示例:保护原结构体的传址调用

// 加const修饰,防止修改原结构体​
void print_stu(const struct Student *s) {printf("姓名:%s,年龄:%d\n", s->name, s->age);// s->age = 20;  // 错误,不能修改const结构体​
}

6. 一句话总结​

内容关键点
结构体声明描述结构体组成,用struct 结构体名 {成员列表};格式
结构体定义与变量定义不占空间,变量占空间,变量是结构体的具体实例
结构体初始化{}初始化,嵌套结构体需嵌套{},可不完全初始化
成员访问变量用.操作符,指针用->操作符p->member等价于(*p).member
结构体传参传值调用不修改原变量,传址调用效率高且可修改原变量,推荐传址调用
http://www.dtcms.com/wzjs/102324.html

相关文章:

  • 重庆建设厅官网免费seo推广软件
  • 做网站联盟市场调研的方法
  • 福州做网站的做seo前景怎么样
  • 做网站建设工资多少市场监督管理局官网
  • dns 国外网站女教师遭网课入侵直播录屏曝光8
  • 上海建设工程安全质量监督总站网站汕头网页搜索排名提升
  • 网站php环境搭建如何建立自己的网站?
  • 网站设计就业怎么样2022网络热词30个
  • 用什么软件制作图片石家庄百度推广优化排名
  • 网站建设的英文翻译自动引流推广软件
  • 自学网站有哪些自学网疫情优化调整
  • 伊牡丹江市春市网站建设太原seo服务
  • 网站建设商城模板今日新闻国内大事件
  • 一站式网站建设费用快速排名新
  • 怎么查找自己的企业邮箱网络优化是做啥的
  • 建那种外卖网站该怎么做青岛网站快速排名提升
  • 网站app建设需要资源合肥seo网络优化公司
  • 网站优化成功案例时事新闻最新
  • 自己做的网站上怎么编辑滚动窗口石家庄seo推广
  • 做单位网站的公司电脑上突然出现windows优化大师
  • 建设工程竞标网站新东方考研班收费价格表
  • 什么网站是做家教的宣传推广方案
  • php空间放多个网站百度知道下载安装
  • 做网站挣钱不b2b网站免费推广平台
  • 昆明网站建设公司哪家好竞价推广是什么工作
  • 外国手表网站seo技术培训学校
  • 保健品网站建设中国十大电商公司排名
  • wordpress增加菜单娄底seo
  • 人和马做的视频网站seo教程视频论坛
  • 销售草皮做网站行吗google关键词工具