C语言结构体 笔记

news2024/9/28 17:29:54
  1. C语言提供结构体来管理不同类型的数据组合。C语言中的结构体类似于Java中的类。

  1. 声明结构体类型

  1. 定义变量名

  1. 定义变量名和初始化

  1. 结构体对齐

结构体的大小必须是其最大成员的整数倍!

(1)例如,此结构体的大小为16。因为double类型占8个字节,而short类型占2个字节,所以就以8个字节为最大成员单位,即使不满8字节也算作8字节。

(2)例如,此结构体的大小为16字节。因为double类型占8个字节,而int类型和short类型分别占4个字节和2个字节,所以就以8个字节为最大成员单位。并且int和short的大小加起来小于8字节,所以也只算作8字节。

6.结构体指针

一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以设置一个指针变量,用它指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址.指针变量也可以用来指向结构体数组中的元素,从而能够通过结构体指针快速访问结构体内的每个成员。

从下面代码中我们可以看到, p就是一个结构体指针,可以对结构体s取地址并赋给p,这样借助成员选择操作符,就可以通过p访问结构体的每个成员,然后进行打印.我们知道数组名中存储的是数据的首地址,所以可以将sarr赋给p,这样就可以通过两种方式访问对应的成员。

使用(*p).num访问成员为什么要加括号呢?原因是“.”成员选择的优先级高于“*”(即取值)运算符,所以必须加括号,通过*p得到sarr[0],然后获取对应的成员。

也可以指向

7.typedef的使用

typedef类似于取别名。

在下面的代码中,使用stu定义结构体变量和使用struct student定义结构体变量是等价的;使用INTEGER定义变量i和使用int定义变量i是等价的; pstu等价于struct student*,所以p是结构体指针变量。

8.C++的引用

引用是C++的语法,使用手法是在形参位置可以用&符号,c语言是不可以的,同时代码文件后缀需要是cpp才行。当我们在子函数改变主函数中某一个变量的值时,使用C++的引用操作起来非常方便,如果我们只是读取对应变量的值,而不改变,是不需要使用引用的。

下图1为加入了C++引用的代码

下图2为纯C语言代码

区别在于,C++使用“&”为引用符,取代原C语言中的“*”为指针符。

子函数内修改主函数的一级指针变量(这是是重要的! )

引用符号位置没关系,对于形参void modify_pointer(int*&p,int *q)我们不可以写为voidmodify_pointer(int &*p,int*q),因为引用符号必须和变量名直接相邻,中间不可以放入其他,否则会造成编译不通。

例题:

//当子函数要修改主函数中的p,那么就加引用。引用如何实现的,完全不需要去关心。

#include<stdio.h>
#include<stdlib.h>
void f1(char *&p)
{
    p = (char *)malloc(100);
    fgets(p,100,stdin);
}

int main()
{
    char *p;
    f1(p);    //p中的值已经在子函数中被改变了,所以可以直接输出p的值。 
    puts(p);
    free(p);
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/174890.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

聊一聊用户增长

#01 什么是用户增长 用户增长基本上会涉及生意场上的各行各业&#xff0c;你开个店面希望有更多的客户光顾&#xff0c;你做了个APP希望有更多的用户经常使用&#xff0c;你搭建了个电商平台希望有更多的人下单买东西。 用户增长&#xff0c;即以提升用户LTV为目的&#xff08…

MongoDB学习笔记【part1】概念与安装

一、NoSQL简介 NoSQL Not Only SQL&#xff0c;不仅仅是SQL&#xff0c;泛指非关系型数据库。NoSQL 不依赖业务逻辑方式存储&#xff0c;而以简单的key-value模式存储。因此大大的增加了数据库的扩展能力。 特点&#xff1a;不遵循SQL标准、不支持ACID&#xff08;原子、一致…

Linux常用命令——sysctl命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) sysctl 时动态地修改内核的运行参数 补充说明 sysctl命令被用于在内核运行时动态地修改内核的运行参数&#xff0c;可用的内核参数在目录/proc/sys中。它包含一些TCP/ip堆栈和虚拟内存系统的高级选项&#xff…

FANUC机器人INTP-250或251用户坐标系或工具坐标系与示教资料不符报警的处理办法

FANUC机器人INTP-250或251用户坐标系或工具坐标系与示教资料不符报警的处理办法 在机器人的日常使用过程中,有可能会碰到这样的情况: 点位的示教是在工具坐标系1、用户坐标系0下示教的,如下图所示, 但是使用过程中可能被自己或别人不小心修改成了工具坐标系2、用户坐标系…

HTML学习02

表格标签的学习 表格 table 行 tr列 td表头列 thtable中有如下属性 border&#xff1a;表格边框的粗细width:表格的宽度cellspacing&#xff1a;单元格间距cellpadding&#xff1a;单元格填充. tr中有一个属性&#xff1a; align -> center , left , right …

数和森林(快来瞧)

森林的定义 森林是由多颗互不相交的树所构成的树的集合&#xff0c;即森林包含多棵树&#xff0c;每一棵树都有自己的根结点。一棵树也可以看成森林。 树的表示及基本操作 1.树&#xff08;一般树&#xff09;的表示方法 1.1树的双亲表示法 树的双亲表示法是将树的各个节点…

《牛客网刷题之零基础入门前端之CSS》

目录 CSS 选择器 FED9 CSS选择器——标签、类、ID选择器 FED10 CSS选择器——伪类选择器 FED11 CSS选择器——伪元素 样式设置 FED12 按要求写一个圆 FED13 设置盒子宽高 FED74 段落标识 FED75 设置文字颜色 FED76 圣诞树 布局 FED14 浮动和清除浮动 FED15 固定定…

LeetCode刷题模版:162、164-166、168

目录 简介162. 寻找峰值164. 最大间距【考查排序】165. 比较版本号166. 分数到小数168. Excel表列名称结语简介 Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后…

【GlobalMapper精品教程】041:从多波段影像中提取单波段方法

本实验讲解globalmapper中文24软件从多波段遥感影像中提取单波段方法。 参考阅读:【Envi风暴】Envi插件大全:多波段拆分工具的巧妙使用 文章目录 一、多波段影像介绍二、单波段提取方法一、多波段影像介绍 加载实验数据:打开GM软件,加载专栏配套实验数据包中的data041.rar…

第二章 IOC

1.IOC底层原理*什么是IOC&#xff1a;控制反转&#xff0c;把对象创建和对象之间的调用过程交给Spring进行管理*使用IOC的目的&#xff1a;降低耦合度*IOC底层原理&#xff1a;xml解析工厂模式反射*IOC思想基于IOC容器完成&#xff0c;IOC容器底层就是对象工厂*Spring提供IOC容…

【网络安全】WiFi密码爆破教程

WiFi密码爆破教程前言一、什么是暴力破解&#xff1f;二、准备破解工具1.VMware Pro 16 虚拟机安装2. VMware安装Kali Linux3. kali监听无限网卡三、WiFi密码暴力破解1. 虚拟机连接USB网卡2. 扫描附近WiFi3. 查看目标WiFi连接设备4. 抓包5. 破解前言 暴力破解攻击是指攻击者通…

代码随想录算法训练营第15天 102. 二叉树的层序遍历、226. 翻转二叉树

代码随想录算法训练营第15天| 102. 二叉树的层序遍历、226. 翻转二叉树 二叉树的层序遍历 学会二叉树的层序遍历&#xff0c;可以一口气打完以下十题&#xff1a; 102.二叉树的层序遍历107.二叉树的层次遍历II199.二叉树的右视图637.二叉树的层平均值429.N叉树的层序遍历515…

4-3指令系统-CISC和RISC

文章目录一.复杂指令系统计算机CISC二.精简指令系统计算机RISC三.CISC和RISC比较一.复杂指令系统计算机CISC 为增强原有指令的功能&#xff0c;设置更为复杂的新指令实现软件功能的硬化&#xff0c;这类机器成为复杂指令系统计算机CISC&#xff08;Complex Instruction Set Co…

Linux下的FTP服务器

目录 总体功能 功能1----------------查看服务器端的文件列表信息 功能2 ---------------从服务器段下载文件到客户端 功能3 ---------------向服务器端上传文件 功能4----------------客户端退出&#xff0c;服务器继续等待链接 总体功能 功能1----------------查看服务器…

STM32 SPI读写速度评估

目的&#xff1a;测试STM32H7 系列芯片的SPI读写速度。 测试环境&#xff1a;使用STM32H743, 逻辑分析仪&#xff0c; cubeIDE&#xff1b; 测试方法&#xff1a;使用了3种方法&#xff1a;软件IO模拟SPI&#xff0c; 软件控制CSMCU的SPI模块&#xff0c;完全使用SPI模块&…

Android 深入系统完全讲解(30)

下图是生命周期的说明图&#xff1a;如图可以看到&#xff1a; 当创建编解码器的时候处于未初始化状态。首先你需要调用 configure(…)方法让它处于 Configured 状态&#xff0c;然后调用 start()方法让其处于 Executing 状态。在 Executing 状态下&#xff0c;你就 可以使用…

LCHub:全新华为云Astro低代码平台,重塑企业数字化转型

为什么技术创新与业务突破难以挂钩?为什么寻求的卓越成果总难以实现?华为云Astro呈上解决之道,抓住重点一招致胜,让人人皆可高效开发,使创新按照你的步调进行。 华为云Astro低代码平台,重塑企业数字化转型 当企业倍受数字化升级困扰时,若仍延用传统编码开发,则会阻碍整…

Bootstrap4 之栅格系统

Bootstrap4 之栅格系统参考描述栅格系统&#xff08;网格系统&#xff09;原理容器.container 与视口宽度行列样式栅格等级网格宽度特点左对齐另起一行自适应布局对齐垂直对齐行列水平对齐排列响应式优先级偏移显隐参考 项目描述Bootstrap 入门经典珍妮弗、凯瑞恩Bootstrap 基…

内存屏障由来的理解和使用《编程高手必学的内存知识》学习笔记 Day 5

系列文章目录 这是本周期内系列打卡文章的所有文章的目录 《Go 并发数据结构和算法实践》学习笔记 Day 1《Go 并发数据结构和算法实践》学习笔记 Day 2《说透芯片》学习笔记 Day 3《深入浅出计算机组成原理》学习笔记 Day 4 文章目录系列文章目录前言一、概念理解&#xff08;…

JUC面试(六)——Java锁

Java锁 公平锁和非公平锁 概念 公平锁 是指多个线程按照申请锁的顺序来获取锁&#xff0c;类似于排队买饭&#xff0c;先来后到&#xff0c;先来先服务&#xff0c;就是公平的&#xff0c;也就是队列 非公平锁 是指多个线程获取锁的顺序&#xff0c;并不是按照申请锁的顺…