在C中,可以有在長度是已知的一個結構定義局部上的陣列中。術語爲陣列,其中長度是已知的C/C++
例如:
{
int foo[8];
assert(sizeof(foo) == sizeof(int[8]));
...
當在一個結構中使用的,陣列尺寸也是已知的。
struct MyStruct { int foo[8]; };
void func(struct MyStruct *mystruct)
{
assert(sizeof(mystruct->foo) == sizeof(int[8]));
但是,當作爲參數傳遞給函數時,這相當於int *
。指的是差的時候什麼術語使用 -
void func(int foo[8])
{
assert(sizeof(foo) == sizeof(int[8])); /* will fail */
這當然是正確的,也值得期待,我的問題是什麼嗎?
例如,這個評論的正確完成是什麼?
/* This macro will only work correctly when ____ */
#define ARRAY_SIZE(a) (sizeof(a)/sizeof((a)[0]))
nitpick:指向數組*的第一個元素的指針* – Christoph
只有當函數參數是一個指針時。問題在於它的OP代碼函數參數*是*'int *'。 – juanchopanza
即使將函數參數聲明爲數組,其實際類型也是指針,而不是數組。所以sizeof將返回指針的大小。 – MByD