You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何arr[i]的sizeof为8字节?C语言指针数组相关疑问

问题解答

先看你的代码定义:char* arr[3] = { "geek", "Geeks", "Geeksfor" };,这是一个指针数组,数组里的每个元素都是char*类型的指针,指向对应的字符串常量。

1. 为什么sizeof(arr[i])输出8字节?

arr[i]是数组的第i个元素,类型是char*(字符指针)。在64位操作系统中,所有指针类型的大小都是8字节(用来存储内存地址),和它指向的字符串长度没有关系。哪怕指针指向的字符串只有1个字符,指针本身的大小还是8字节。

2. 为什么sizeof(&arr[i])也显示8字节?

&arr[i]是取数组第i个元素的地址,这个地址的类型是char**(指向字符指针的指针)。同样,在64位系统下,不管是一级指针还是多级指针,只要是指针类型,大小都是8字节,所以这里的结果也是8字节。

3. 为什么&arr[0]与&arr[1]的地址间隔为8字节?

arr是char*类型的数组,数组中每个元素的大小是8字节(因为char*是8字节)。数组在内存中是连续存储的,所以相邻两个元素的地址差就是单个元素的大小,也就是8字节。比如arr[0]占8字节内存,arr[1]紧接着它后面存储,所以两者的地址差正好是8字节。


内容的提问来源于stack exchange,提问作者Jackob2001

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 13:02:08