C语言重难点总结(1)-指针、二维数组、结构体(联合体、枚举)

news2024/12/24 8:59:38

本节内容

1.指针(指针数组、数组指针)

2.二维数组(指针操作与二维数组)

3.结构体、联合体、枚举

一、指针

1.什么是指针?

内存中字节的编号地址称为指针

2.指针的大小?

固定为四字节

3.指针变量的定义

指针变量定义格式为:变量类型* 指针变量名=地址

例如:int* p1=NULL、int* p2=&a;

4.指针的解引用

 如下:

5.指针+1能力

我们要首先知道在指针指向一个数组时,指针变量代表数组首元素的地址

指针加一能力可以理解为:指针遍历 同一块  内存

如下

6.常量指针和指针常量

常量指针:在定义指针变量的时候如果前用const修饰,那么就成称该指针为常量指针

例如:const int* p;

指针常量:本质上是一个常量,用指针修饰它(指针指向的地址不能修改,地址的内容可以改变)

例如:int* const p;

7.二级指针

指向一级指针数据的指针

例如:int** q;

这里要知道二级指针解一次引用为一级指针

6.指针数组数组指针

指针数组:指针数组可以简单理解为指针的数组,顾名思义就是存储指针的一个数组

例如:int* p[4];

数组指针:数组指针可以简单理解为数组的指针,顾名思义就是指向一个数组的指针(常出现在二维数组),数组指针指向大小为n个元素的数组

例如:int (*p)[4];  //此处数组指针为指向大小为4个整型元素的数组

7.无类型指针

无类型指针可以指向任意类型变量的地址

例如:void* p;

二、二维数组

1.什么是二维数组?

本质上二维数组是由多个大小相等的一维数组构成。

定义方式为:类型名 数组名[行表达式][列表达式];

例如:int arr[3][4];//arr为三行四列的一个数组

2.在逻辑上二维数组相当于一个x行 * y列的平面图,那如果访问第2行的第y+1列会发生什么情况?

 如上所示,访问第2行第5列时,超出了二维数组列范围的大小,超出部分会加入下一行的行中,所以,此处2行5列访问的为3行2列,元素为8。  

所以意味着二维数组是逻辑上不相邻但物理上是相邻的

3.二维数组行与列长度求法

行求法:int row=sizeof(arr)/sizeof(arr[0])

行求法:int col=sizeof(arr[0])/sizeof(arr[0][0])

4.二维数组中指针加一能力(数组指针)

一行一行向下偏移

指针定义  int (*p)[2]=&arr[0];

arr[2][3]<=>*(*(arr+2)+3)

三、结构体、联合体、枚举

1.结构体struck

(1)什么是结构体

不同数据类型的集合称为结构体,结构体是一种类型。

(2)结构体的字节对齐问题

1)结构体没有嵌套结构体情况下,结构体内前几个元素的数据类型所占字节数之和是下一个元素类型的整数倍,如果不是给前一个类型补字节,补成下一个类型的整数倍,最大基本类型的整数倍

Ps:数组不是最大基本类型  e.g:char arr[20]的最大基本类型为char型1字节,但它总共占20字节

2)结构体必须是最大基本类型的整数倍

3)如果结构体嵌套,则嵌套后被嵌套结构体的按其第一个数据的类型作为该结构体的最大基本类型(与数组原理相同),最后结构体内总字节大小要为该结构体中最大基本类型的整数倍

4)pragma park(x)函数使 指定对齐方式大小为x

如图所示

2.联合体union

(1)什么是联合体?

联合体和结构体类似,也是一种自己定义的类型,联合体内所存变量共同使用一块内存空间。

(2)联合体的大小

联合体的大小至少是最大成员的大小,当最大成员大小不是最大对齐数的整数倍时,联合体大小就要对齐到最大对齐数的整数倍数

如图

3.枚举enum

(1)什么是枚举?

枚举是一种特殊的数据类型,是一种同类型的集合。

例如: enum ChessType {black,white};

(2)枚举的大小

枚举的底层为整型,所以大小固定为四字节

例如    enum colorType{red,blue,green};   所以在此枚举中整型0代表红色,1代表蓝色,2代表绿色

                                         0    1     2

             enum colorType{red=8,blue,green};

                                            8     9     10

             enum colorType{red=8,blue,green=1};

                                              8     9      1

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

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

相关文章

YOLOv8改进 | 注意力篇 | YOLOv8引入CBAM注意力机制

1.CBAM介绍 摘要&#xff1a;我们提出了卷积块注意力模块&#xff08;CBAM&#xff09;&#xff0c;这是一种用于前馈卷积神经网络的简单而有效的注意力模块。 给定中间特征图&#xff0c;我们的模块沿着两个独立的维度&#xff08;通道和空间&#xff09;顺序推断注意力图&…

Python | Leetcode Python题解之第384题打乱数组

题目&#xff1a; 题解&#xff1a; class Solution:def __init__(self, nums: List[int]):self.nums numsself.original nums.copy()def reset(self) -> List[int]:self.nums self.original.copy()return self.numsdef shuffle(self) -> List[int]:for i in range(l…

C++ | Leetcode C++题解之第383题赎金信

题目&#xff1a; 题解&#xff1a; class Solution { public:bool canConstruct(string ransomNote, string magazine) {if (ransomNote.size() > magazine.size()) {return false;}vector<int> cnt(26);for (auto & c : magazine) {cnt[c - a];}for (auto &am…

群晖(Docker Compose)配置 frp 服务

为了方便远程电脑&#xff0c;访问自己电脑上的ComfyUI等服务&#xff0c;配置了 frp 服务。 配置 frp 服务后&#xff0c;发现群晖中的一些服务也可以 stcp 安全的暴露出来。 直接在群晖通过 Docker Compose 方式部署 frps 和 frpc&#xff0c;访问者通过 frpc 安全访问暴露…

计算机三级网络第3套练习记背

计算机三级网络第3套练习记背

【C++ | 设计模式】抽象工厂模式的详解与实现

1. 概念 抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;用于创建一系列相关或相互依赖的对象&#xff0c;而无需指定它们具体的类。它允许客户端代码通过工厂接口来创建一组对象&#xff0c;而无需了解它们的具体实现细节。 …

从暴力到秩序:解锁权力奥秘

从暴力到秩序&#xff1a;解锁权力奥秘 - 孔乙己大叔权力的诞生 在人类社会的最初形态中&#xff0c;权力往往源自最原始的力量——暴力。一个人&#xff0c;起初仅拥有一把枪&#xff0c;他的权力简单而直接&#xff1a;决定对谁开枪。然而&#xff0c;随着他利用这把…

【58同城-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞 …

【Scala】Windows下安装Scala(全面)

目录 1.下载 2.安装 3.配置环境变量 1.新增系统环境变量 2.环境变量Path 4.验证 1.下载 官网下载地址&#xff1a;https://downloads.lightbend.com/scala/2.11.12/scala-2.11.12.msi 2.安装 双击下载的.msi文件&#xff1a; 勾选"I accept the terms in the Li…

Flink 1.14.* Flink窗口创建和窗口计算源码

解析Flink如何创建的窗口&#xff0c;和以聚合函数为例&#xff0c;窗口如何计算聚合函数 一、构建不同窗口的build类1、全局窗口2、创建按键分流后的窗口 二、在使用窗口处理数据流时&#xff0c;不同窗口创建的都是窗口算子WindowOperator1、聚合函数实现2、创建全局窗口(入参…

智能合约开发与测试1

智能合约开发与测试 任务一&#xff1a;智能合约设计 &#xff08;1&#xff09;编写新能源智能合约功能需求文档。 区块链新能源管理智能合约功能需求包括资产与能源绑定、用户管理、能源交易、智能结算等&#xff0c;确保安全性、隐私保护和可扩展性&#xff0c;提高能源利…

2024年第六届控制与机器人国际会议(ICCR 2024)即将召开!

2024年第六届控制与机器人国际会议&#xff08;ICCR 2024&#xff09;将于2024年12月5日至7日在日本横滨举行。智能机器人结合了多种概念、学科和技术&#xff0c;共同创造出各种有用的设备、操作器和自主实体&#xff0c;为特定人类社区服务&#xff0c;如制造设备、医疗和远程…

【练习】哈希表的使用

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;个人专栏&#xff1a;算法(Java)&#x1f4d5;格言&#xff1a;吾愚多不敏&#xff0c;而愿加学欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 1.哈希表简介 2.两数之和 题目描述 题解 代码实现 2.面试题.判定是否…

代码随想录Day 28|题目:122.买卖股票的最佳时机Ⅱ、55.跳跃游戏、45.跳跃游戏Ⅱ、1005.K次取反后最大化的数组和

提示&#xff1a;DDU&#xff0c;供自己复习使用。欢迎大家前来讨论~ 文章目录 题目题目一&#xff1a;122.买卖股票的最佳时机 II贪心算法&#xff1a;动态规划 题目二&#xff1a;55.跳跃游戏解题思路&#xff1a; 题目三&#xff1a; 45.跳跃游戏 II解题思路方法一方法二 题…

在Centos中的mysql的备份与恢复

1.物理备份 冷备份&#xff1a;关闭数据库时进行热备份&#xff1a;数据库运行时进行&#xff0c;依赖于数据库日志文件温备份&#xff1a;数据库不可写入但可读的状态下进行 2.逻辑备份 对数据库的表或者对象进行备份 3.备份策略 完全备份&#xff1a;每次都备份完整的数…

每日OJ_牛客_Rational Arithmetic(英文题模拟有理数运算)

目录 牛客_Rational Arithmetic&#xff08;英文题模拟有理数运算&#xff09; 解析代码 牛客_Rational Arithmetic&#xff08;英文题模拟有理数运算&#xff09; Rational Arithmetic (20)__牛客网 解析代码 本题看上去不难&#xff0c;但是存在几个问题&#xff1a; 除…

【C++】汇编分析

传参 有的是用寄存器传参&#xff0c;有的用push传参 我在MSVC编译测出来的是PUSH传参&#xff08;debug模式&#xff09;&#xff0c;具体过程如下 long func(long a, long b, long c, long d,long e, long f, long g, long h) {long sum;sum (a b c d e f g h);ret…

《机器学习》文本数据分析之关键词提取、TF-IDF、项目实现 <上>

目录 一、如何进行关键词提取 1、关键词提取步骤 1&#xff09;数据收集 2&#xff09;数据准备 3&#xff09;模型建立 4&#xff09;模型结果统计 5&#xff09;TF-IDF分析 2、什么是语料库 3、如何进行中文分词 1&#xff09;导包 2&#xff09;导入分词库 3&#xff09…

智能优化特征选择|基于鲸鱼WOA优化算法实现的特征选择研究Matlab程序(SVM分类器)

智能优化特征选择|基于鲸鱼WOA优化算法实现的特征选择研究Matlab程序&#xff08;SVM分类器&#xff09; 文章目录 一、基本原理鲸鱼智能优化特征选择&#xff08;WOA&#xff09;结合SVM分类器的详细原理和流程原理流程 二、实验结果三、核心代码四、代码获取五、总结 智能优化…

js | XMLHttpRequest

是什么&#xff1f; 和serve交互数据的对象&#xff1b;能够达到页面部分刷新的效果&#xff0c;也就是获取数据之后&#xff0c;不会使得整个页面都刷新&#xff1b;虽然名字是XML&#xff0c;但不限于XML数据。 怎么用&#xff1f; function reqListener() {console.log(thi…