我有一個指針(uint8_t * myPointer),作爲參數傳遞給一個方法,然後這個方法爲這個指針設置一個值,但是我想知道myPointer使用了多少個字節(指向?)變量。如何查找指針使用的字節數?
在此先感謝。
我有一個指針(uint8_t * myPointer),作爲參數傳遞給一個方法,然後這個方法爲這個指針設置一個值,但是我想知道myPointer使用了多少個字節(指向?)變量。如何查找指針使用的字節數?
在此先感謝。
指針的大小: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 - 但應該指出,如果「foo」是一個很大的功能,你會招致如果N的不同值的數量很大,則代碼與模板膨脹。你可以通過讓foo成爲一個存根,調用foo的一個接受一個顯式長度參數的重載來緩解這個問題。 – 2010-06-21 20:56:33
你不能。您必須自己傳遞指針指向的緩衝區的大小。
你不能。除非數組在編譯時被實例化。示例int test[] = {1, 2, 3, 4};
在這種情況下,您可以使用sizeof(test)
返回正確的大小。否則,如果不存儲您自己的計數器,則無法確定數組的大小。
我假設你的意思是指針所需的內存。你可以在編譯時用sizeof(myPointer)
來檢查。
重複的問題。 – 2010-06-21 19:08:49
@Stefan - 你可以添加一個鏈接到重複? – ChrisF 2010-06-21 19:14:46
@ChrisF - 當然! http://stackoverflow.com/questions/1975128/sizeof-an-array-in-the-c-programming-language – 2010-06-21 19:26:51