0
void * ptr0 = (void*)"Buffer_1";
int size0 = sizeof(ptr0);
// WILL THIS RETURN THE NUMBER OF BYTES OCCUPIED BY THE MEMORY POINTED BY ptr0?

我的要求是
1) 将一些数据存储在缓冲区中并创建一个指向它的 void* 指针,我在第一行中执行此操作。
2)稍后我想以字节为单位获取此缓冲区的大小。第二行将完成这项工作。

4

3 回答 3

7

sizeof返回类型所需的大小。由于sizeof在这种情况下传递给的类型是指针,因此它将返回指针的大小。

如果您需要指针指向的数据的大小,则必须通过显式存储来记住它。

于 2012-11-05T07:36:43.730 回答
2

不,这只会以字节为单位返回指针的大小。用于sizeof获取数组的大小仅适用于这样声明的数组

char szArray[10];

不在动态创建的数组上

char* pArray = new char[10];

sizeof(szArray);  // number of elements * sizeof(char) = 10
sizeof(pArray);   // sizeof the pointer
于 2012-11-05T07:39:05.673 回答
1

sizeof() 在编译时工作。所以sizeof(ptr0)通常会返回 4 或 8 个字节。而是使用strlen? 或实际存储编号。(void *)由 保存在单独变量中的字节数。

于 2012-11-05T07:37:58.713 回答