0

我有以下代码:

int* d = (int*) malloc(100 * sizeof(int));
cout<<"size of d which is pointer is: " << sizeof(d)<<endl;

我知道 sizeof 输出 4 因为 d 是一个 ptr。但是,如何使用 sizeof 找到整个数组的大小

4

4 回答 4

7

您不能 -sizeof是编译时操作,因此不是动态的。

当您使用 c++ 时,请std::vector改用。否则创建一个结构来存储数组的指针和大小。而是通过它。

于 2013-02-10T09:04:39.723 回答
1

指针为您提供了存储数据的内存位置,这就是为什么您不能仅从该信息中获取其大小的原因。

这类似于通过知道我的地址知道我的房子有多大(没有先验知识或使用谷歌地图等工具)

于 2013-02-10T09:07:56.853 回答
1

直接回答。不,你不能,但你可以试试这个:

int x[]={1,2,3,4};
int *ptr=x;
decltype(sizeof(*ptr)) size=0;
while(*ptr<5){
          size =size+sizeof(*ptr);
          ptr++;
          }
          cout<<"Size is : "<<size;

输出:

Size is:16

于 2013-02-10T09:16:28.993 回答
1

你可能会争辩说你已经知道整个数组的大小了sizeof- 你在原来的malloc调用中已经知道了 - 100 * sizeof(int)。尽管malloc机器必须在内部知道与指针关联的内存量(它需要它进行相应的free调用),并且显然某些实现提供了返回此信息的函数,但据我所知,没有实现独立和可移植的方式这样做而不自己处理。

于 2013-02-10T09:29:28.123 回答