为何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
相关产品推荐
相关产品推荐

