我有一个指针(uint8_t * myPointer),我作为参数传递给一个方法,然后这个方法为这个指针设置一个值,但我想知道有多少字节被使用(指向?) myPointer变量。
提前致谢。
答案 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)
检查此内容。