如何解决关于 C 中整数指针变量大小的问题
我编写了这个非常简单的程序来检查 c 中整数指针的大小。
#include <stdio.h>
int main(void) {
int i = 10;
int* i_ptr = &i;
int arr[3] = {13,14,15};
printf("\n ... Size of an integer pointer is: %ld bytes and %ld bits ...",sizeof(i_ptr),8*sizeof(i_ptr));
printf("\n\n ... Size of a 3-element integer array is: %ld bytes and %ld bits ...\n\n",sizeof(arr),8*sizeof(arr));
printf(" ... Size of the *arr element is: %ld bytes and %ld bits ...\n\n",sizeof(*arr),8*sizeof(*arr));
return 0;
}
关于不同变量大小的输出是:
... Size of an integer pointer is: 8 bytes and 64 bits ...
... Size of a 3-element integer array is: 12 bytes and 96 bits ...
... Size of the *arr element is: 4 bytes and 32 bits ...
现在,我的问题如下。因为我运行的是 64 位 linux 操作系统,所以我知道整数指针变量的大小是 64 位长。整数数组的大小为 12 个字节,因为一个整数占用 4 个字节的内存,并且该数组由 3 个整数组成。但是,当我认为数组基本上是 C 中的指针并且数组的变量指向数组的第一个元素时,我认为数组的大小将类似于相应指针的大小。然而,我也明白这并不意味着数组的大小将是 24 个字节的长度,而 3 个整数指针的大小。这对我来说似乎有点混乱,所以任何建议将不胜感激。
解决方法
数组不是指针。如果你声明一个数组类型的对象,那么它的大小等于数组元素占用的字节数。
但是在表达式中使用的数组指示符(例如用作 sizeof
运算符的操作数的罕见例外)被转换为指向其第一个元素的指针。
来自 C 标准(6.3.2.1 左值、数组和函数指示符)
3 除非是 sizeof 运算符或一元 & 的操作数 运算符,或者是用于初始化数组的字符串文字, 类型为“类型数组”的表达式被转换为 类型为“指向类型的指针”的表达式,指向首字母 数组对象的元素并且不是左值。如果数组对象 有寄存器存储类,行为未定义。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。