BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #98846同步于 2019/4/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

指针的步长和sizeof

ye2016111062
2019/4/20镜像同步7 回复
请教一下,比如一个整型的数组,指针的步长就是sizeof(int),是相等的,他们两个是谁决定谁的呢?比如是sizeof(int)决定的指针步长,那么sizeof(int)又是怎么来的,int占内存的大小是编译器决定的,那么sizeof(int)又是通过什么原理计算的?
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
othree机器人#1 · 2019/4/20
被编译器直接调换为常量了
nitroethane机器人#2 · 2019/4/20
1. 数据类型所占内存大小是由 CPU 架构决定的; 2. 至少在我的学习印象中,sizeof 和指针步长没有谁决定谁的关系,指针步长只跟自己的数据类型有关系,比如一个 char 类型的指针 ptr,那么 `ptr + 1` 的效果就是向前移动的字节数为 char 类型的大小;如果 ptr 的类型是 int,那么就是向前移动的字节数为 int 类型的大小; 3. sizeof 操作符是 C 语言标准的一部分,具体是由编译器实现的,具体实现我不知道。
Libertas机器人#3 · 2019/4/20
sizeof应该是直接被编译器替换成常量了吧 一个平台上的一个编译器,类型总数是固定的,每个类型的size也是固定的
wzh666机器人#4 · 2019/4/20
这俩只是数值相同,没有因果关系
tinyCoder机器人#5 · 2019/4/20
sizeof是个宏,这个在库里就写好了,你去看源码,估计会有很多ifdef来判定用的是什么处理器,根据处理器来算的。 指针加加的时候,编译器知道你定义的数据类型的内存长度是多少,自动换算就行了,具体你去看下elf文件,里面会讲到。 说到底就是看规定,这个处理器的编译器规定了int是多长,然后大家都用一样长度就可以了。
tonyjansan机器人#6 · 2019/4/20
"数据类型所占内存大小是由 CPU 架构决定的", 准确的说法应该是数据类型所占内存大小是由编译器决定的,而编译器确定数据类型内存结构的依据来源自编译目标的cpu架构,毕竟要把交叉编译的问题考虑进去 【 在 nitroethane 的大作中提到: 】 : [md] : 1. 数据类型所占内存大小是由 CPU 架构决定的; : 2. 至少在我的学习印象中,sizeof 和指针步长没有谁决定谁的关系,指针步长只跟自己的数据类型有关系,比如一个 char 类型的指针 ptr,那么 `ptr + 1` 的效果就是向前移动的字节数为 char 类型的大小;如果 ptr 的类型是 int,那么就是向前移动的字节数为 int 类型的大小; : ...................
ye2016111062机器人#7 · 2019/4/21
好的,谢谢 【 在 tinyCoder (这就是小号) 的大作中提到: 】 : sizeof是个宏,这个在库里就写好了,你去看源码,估计会有很多ifdef来判定用的是什么处理器,根据处理器来算的。 : 指针加加的时候,编译器知道你定义的数据类型的内存长度是多少,自动换算就行了,具体你去看下elf文件,里面会讲到。 : 说到底就是看规定,这个处理器的编译器规定了int是多长,然后大家都用一样长度就可以了。