c/c++学习笔记(11)
指向结构的指针
对于指针和数组首先要注意:两个指针之间的加法运算是非法的,但是指针的剑法却是合法的。且对于数组arr而言,&arr[-1]是绝对非法的,对于&arr[n]的间接引用也是非法的。但是C语言的定义保证数组末尾的第一个元素,即&arr[n]的指针算术运算可以正确执行。
千万不要认为结构的长度等于各成员的长度的和。因为不同的对象有着不同的对其要求,所以结构中可能出现未命名的"空穴"(hole)。对于一下结构:
1 struct { 2 char c; 3 int i; 4 };
char占一个字符,int占4个字符,该结构可能占用的是8个字节而非5个字节。使用sizeof运算符可以返回对象正确的长度。
自引用结构
自引用结构的使用方法如下:
1 struct tnode 2 { 3 char *word; 4 int count; 5 struct tnode *left; 6 struct tnode *right; 7 };
注意:一个包含自身实例的结构是非法的,但是指向tnode类型的指针确是合法的。
自引用结构还有一种变体:两个结构相互引用。使用方法如下:
1 struct t 2 { 3 struct s *p;//指向一个s结构 4 } 5 struct s 6 { 7 struct t *q;//指向一个t结构 8 }
存储分配程序
存储分配程序需要为不同的对象分配存储空间,然而程序中只会有一个存储分配程序。假定用一个分配程序来处理多种类型的请求,比如指向char类型的指针和指向struct tnode类型的指针,则会出现2种问题。1、他如何在大多数实际机器上满足各种类型对象的对其要求(如:整型通常需要分配在偶数地址上)?2、使用什么样的声明能处理分配程序必须能返回不同类型的指针问题?
对其要求一般比较容易满足,只需要确保分配程序始终返回满足所有对齐限制的指针就可以了,其代价就是要牺牲一些存储空间。而对于返回不同类型的指针,上次通过完成一个比较通用性的线性查询,可以知道如果让函数返回指向void类型的指针,然后再显示地转化为所需要的类型指针,这样也可以满足要求了。
今天的学习又结束了,明天继续,加油!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述