此文章为网上相关内容的小总结
首先是字(word)的定义:由若干个字节构成,字的位数叫做字长,不同档次的机器有不同的字长,它是计算机进行数据处理和运算的单位,也就是 CPU 一次能处理的二进制代码的长度,即CPU一次所能处理的二进制代码的位数,也就是CPU的地址线的个数,即CPU的位宽。我们平时说的32位处理器,64位处理器中的 32、64 就是对应处理器的字长。
各类型的数据长度是由编译器决定的: 发现数据类型占内存的位数实际上与操作系统的位数和编译器(不同编译器支持的位数可能有所不同)都有关,具体某种数据类型占字节数得编译器根据操作系统位数两者之间进行协调好后分配内存大小。具体在使用的时候如想知道具体占内存的位数通过sizeof(int)可以得到准确的答案。
在这里以int与char典型的变量类型举例,他们作为指针时,数据长度相同,但受处理器位宽影响,会有所不同
在32位处理器 char为1字节 *char为4字节 int为4字节 *int为4字节
在64位处理器 char为1字节 *char为8字节 int为4字节 *int为8字节
在各种变量类型指针+1的问题上
首先在定义一个变量并赋值时,编译器会给此变量自动分配内存地址,栈区进行入栈操作,全局区在相应的地址上进行存储数据。
那么指针会指向一个地址,指针变量加1,即向后移动1 个位置表示指针变量指向下一个数据元素的首地址。但是这将移动多少位地址,这跟变量的类型有关
例如64位处理器中
int类型为4字节 对应的指针+1将移动4字节
char类型为1字节 对应的指针+1将移动1字节
以此类推,可以知道不同类型指针+1的区别。