我有以下代码:
int* d = (int*) malloc(100 * sizeof(int));
cout<<"size of d which is pointer is: " << sizeof(d)<<endl;
我知道 sizeof 输出 4 因为 d 是一个 ptr。但是,如何使用 sizeof 找到整个数组的大小
我有以下代码:
int* d = (int*) malloc(100 * sizeof(int));
cout<<"size of d which is pointer is: " << sizeof(d)<<endl;
我知道 sizeof 输出 4 因为 d 是一个 ptr。但是,如何使用 sizeof 找到整个数组的大小
您不能 -sizeof
是编译时操作,因此不是动态的。
当您使用 c++ 时,请std::vector
改用。否则创建一个结构来存储数组的指针和大小。而是通过它。
指针为您提供了存储数据的内存位置,这就是为什么您不能仅从该信息中获取其大小的原因。
这类似于通过知道我的地址知道我的房子有多大(没有先验知识或使用谷歌地图等工具)
直接回答。不,你不能,但你可以试试这个:
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
你可能会争辩说你已经知道整个数组的大小了sizeof
- 你在原来的malloc
调用中已经知道了 - 100 * sizeof(int)
。尽管malloc
机器必须在内部知道与指针关联的内存量(它需要它进行相应的free
调用),并且显然某些实现提供了返回此信息的函数,但据我所知,没有实现独立和可移植的方式这样做而不自己处理。