如何找到指针使用的字节数?

时间:2010-06-21 19:05:40

标签: c++ c objective-c pointers

我有一个指针(uint8_t * myPointer),我作为参数传递给一个方法,然后这个方法为这个指针设置一个值,但我想知道有多少字节被使用(指向?) myPointer变量。

提前致谢。

4 个答案:

答案 0 :(得分:11)

指针的大小:sizeof(myPointer)(等于sizeof(uint8_t*)
指针对象的大小:sizeof(*myPointer)(等于sizeof(uint8_t)

如果你的意思是这指向一个数组,那么就没有办法知道这一点。指针只是指向,而不关心值的来源。

要通过指针传递数组,您还需要传递大小:

void foo(uint8_t* pStart, size_t pCount);

uint8_t arr[10] = { /* ... */ };
foo(arr, 10);

您可以使用模板更轻松地传递整个数组:

template <size_t N>
void foo(uint8_t (&pArray)[N])
{
    foo(pArray, N); // call other foo, fill in size.
    // could also just write your function in there, using N as the size
}

uint8_t arr[10] = { /* ... */ };
foo(arr); // N is deduced

答案 1 :(得分:3)

你做不到。您必须自己传递指针指向的缓冲区大小。

答案 2 :(得分:0)

你做不到。除非在编译时实例化数组。示例int test[] = {1, 2, 3, 4};在这种情况下,您可以使用sizeof(test)返回正确的大小。否则,如果不存储自己的计数器,就无法判断数组的大小。

答案 3 :(得分:0)

我假设你的意思是指针所需的内存。您可以在编译时使用sizeof(myPointer)检查此内容。