c - 为什么两个指针之间有 16 个字节的差异而不是 8 个字节?
问题描述
#include <stdio.h>
int main() {
const char *myarr[7];
myarr[0] = "1st array";
myarr[1] = "2nd array";
myarr[2] = "3rd array";
myarr[3] = "4th array";
myarr[4] = "5th array";
myarr[5] = "5";
myarr[6] = "6";
printf("\n%p", myarr[0]); /*00007FF749919C18*/
printf("\n%p", myarr[1]); /*00007FF7B3C89C28*/
printf("\n%p", myarr[5]); /*00007FF749919C14*/
printf("\n%p", myarr[6]); /*00007FF7B3C89C24*/
}
当我在上面的代码中打印它们的值时,我注释了地址。存储在第 0 和第 1 个索引指针内的地址之间的差异是16 个字节。
起初我以为是因为我分配给它们的字符串是 9 个字符,所以超过8 个字节,它不适合8 字节块,所以它被扩展到16 个字节。因此,为了检查这一点,我指出了第 5 和第 6 个索引中的短字符串,但正如您所看到的,地址之间仍然存在 16 字节的差异。
由于我有一个64 位系统,地址第 5 和第 6 指针之间的差异不应该是8 个字节吗?
解决方案
myarr[0]
指向第一个元素"1st array"
myarr[1]
指向第一个元素"2nd array"
它们不可能相隔8 个字节。
但请放心,&myarr[1] - &myarr[0]
会的sizeof(char*)
。
请注意,您打印的地址不是相隔 16 个字节:例如,第一组在第 5 个十六进制有效数字上有所不同。
推荐阅读
- mysql - 迁移错误:语法错误或访问冲突:1071 Laravel 中指定的键太长
- python - 如何从一个值中获取 json 文件
- python - 调用与 Excel 链接的 CPLEX (.mod) 文件
- python-3.x - Chalice 框架中 Python 递归函数的奇怪问题
- r - 从R中的url列表下载多个pdf文件时出错
- python-2.7 - 无法安装 h5py(错误为 h5py 构建轮子失败)
- amazon-web-services - 部署 RDS 数据库集群时出现 InvalidParameterCombination 错误
- python - 如果我显示图片,情节正在改变它的大小
- r - 当它不按顺序时如何计算r中的行差异
- angular - angular keyup 事件触发两次