【发布时间】:2021-04-25 04:53:19
【问题描述】:
我知道sizeof 运算符返回 C/C++ 中任何给定类型的大小。在 C 风格的数组中,数组的名称本身就是一个指针,它指向数组的第一个元素。例如,在int arr[2] = {2, 3} 中,*arr 将产生2。那为什么sizeof运算符不返回指针变量的大小,而是返回数组在内存中占用的总大小。
查看此代码:
#include <iostream>
using namespace std;
int main()
{
int arr[10];
cout << sizeof (arr);
return 0;
}
输出:40 个字节(给定int 需要 4 个字节)
我想在这段代码中问的是,即使arr 只是一个指针,那么 sizeof 如何返回这个数组占用的整个大小?
我写了自己的sizeof 来理解它:
#include <iostream>
using namespace std;
template <typename T>
size_t my_sizeOf(T var)
{
return (char *) (&var + 1) - (char *) (&var);
}
int main()
{
int arr[10];
cout << my_sizeOf(arr);
return 0;
}
输出:8 字节(给定的指针变量占用 8 字节)
这段代码现在只打印指针变量的大小。我是否遗漏了有关 sizeof 运算符的一些关键点?
【问题讨论】:
-
这能回答你的问题吗? stackoverflow.com/questions/29454806/…
-
这能回答你的问题吗? When are arrays converted to pointers?