C 语言中不同类型指针的大小是否完全相同,为什么
C 语言中不同类型指针的大小是完全相同的。因为指针本身存放的是内存地址,而内存地址的长度是固定的(32位或64位),所以要存放固定长度的地址,小了不够、多了浪费。
C 语言中不同类型指针的大小是完全相同的。因为指针本身存放的是内存地址,而内存地址的长度是固定的(32位或64位),所以要存放固定长度的地址,小了不够、多了浪费。
主流平台如:x86、x64、IA64、arm等平台,基本不再需要考虑指针本身的大小差异了。另外现代的标准还规定编译器应该定义如下类型:std::intptr_t 和void*同大小的有符号整数std::uintptr_t 和void*同大小的无符号整数这两个类型通常用于将指针类型转换成整数类型用于运算、存储或传递的场合。另外,C++标准规定了用于表示数据大小的类型:std::size_t,以及表示指针差值的类型std::ptrdiff_t 这两个类型通常用于需要将指针/大小进行数值运算的场合。在目前的主流平台与编译器中,它们恰好与void*同大小,但为了更好的可移植性,如果要将一个指针强制转换成整数类型,应该用std::uintptr_t或std::intptr_t
但对于位数低的老 CPU 和嵌入式 CPU 那就不一定了,像 8086 就因为其分段的内存模型,引入了三种不同的指针:Near,大小为 16 位;Far,大小为 32 位(段 + 偏移),不进行规范化,指向的数据结构不能跨段;Huge,大小为 32 位(段 + 偏移),有规范化:这种指针的算术运算需要特殊实现来支持跨段的大型数据结构。对于这些平台,往往一组 malloc/free 是不够的,它们的 C 库都会提供多组不同的分配/回收函数来从内存的不同区域分配内存。如果涉及 EMS/XMS 之类需要驱动才能使用的扩展内存的话,它们分配给你搞不好就不是常规的指针了,而是一个特殊的 Handle,你需要调取驱动里面的功能来访问它们对应的内存。
延伸阅读:
1.语言简洁、紧凑,使用方便、灵活 。C语言一共只有32个关键字、9种控制语句,程序书写形式自由,主要用小写字母表示,压缩了一切不必要的成分。C语言比其他许多高级语言简练,源程序短,因此输入程序时工作量少。
2.运算符丰富,C语言的运算符包含的范围很广泛,共有34种运算符。C语言把括号、赋值和强制类型转换等都作为运算符处理,从而使C语言的运算类型极其丰富,表达式类型多样化。
3.数据类型丰富。C语言提供的数据类型包括整形、浮点型、字符型、数组类型、指针类型、结构体类型和共用体类型等,C99又扩充了复数浮点型、超长整型(long long)和布尔类型(bool)等。尤其是指针类型数据,使用十分灵活和多样化,能用来实现各种复杂的数据结构(如链表、树、栈等)的运算。
4.具有结构化的控制语句。用函数作为程序的模块单位,便于实现程序的模块化。C语言是完全模块化和结构化的语言。
5.语法限制不太严格,程序设计自由度大。
最后建议,企业在引入信息化系统初期,切记要合理有效地运用好工具,这样一来不仅可以让公司业务高效地运行,还能最大程度保证团队目标的达成。同时还能大幅缩短系统开发和部署的时间成本。特别是有特定需求功能需要定制化的企业,可以采用我们公司自研的企业级低代码平台:织信Informat。 织信平台基于数据模型优先的设计理念,提供大量标准化的组件,内置AI助手、组件设计器、自动化(图形化编程)、脚本、工作流引擎(BPMN2.0)、自定义API、表单设计器、权限、仪表盘等功能,能帮助企业构建高度复杂核心的数字化系统。如ERP、MES、CRM、PLM、SCM、WMS、项目管理、流程管理等多个应用场景,全面助力企业落地国产化/信息化/数字化转型战略目标。 版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们微信:Informat_5 处理,核实后本网站将在24小时内删除。版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系邮箱:hopper@cornerstone365.cn 处理,核实后本网站将在24小时内删除。
相关文章推荐
立即开启你的数字化管理
用心为每一位用户提供专业的数字化解决方案及业务咨询