簡體   English   中英

指向數組的指針作為函數參數

[英]Pointer to array as function parameter

我寫了一個函數,它接受一個指向數組的指針來初始化它的值:

#define FIXED_SIZE 256
int Foo(int *pArray[FIXED_SIZE])
{
/*...*/
}

//Call:

int array[FIXED_SIZE];
Foo(&array);

它不編譯:

錯誤C2664:'Foo':無法將參數1從'int(* __ w64)[256]'轉換為'int * []'

但是,我一起攻擊了這個:

typedef int FixedArray[FIXED_SIZE];
int Foo(FixedArray *pArray)
{
/*...*/
}

//Call:

FixedArray array;
Foo(&array);

它有效。 我在第一個定義中缺少什么? 我以為這兩個是等價的......

int Foo(int *pArray[FIXED_SIZE])
{
/*...*/
}

在第一種情況下, pArray是一個指針數組,而不是指向數組的指針

您需要括號來使用指向數組的指針:

int Foo(int (*pArray)[FIXED_SIZE])

你可以使用typedef免費獲得這個(因為它已經是一個類型, *具有不同的含義)。 換句話說, typedef類型帶有自己的括號。

注意:經驗表明,在99%的人使用指向數組的指針的情況下, 他們可以而且實際上應該只使用指向第一個元素的指針

一個簡單的事情是記住順時針螺旋規則,可以在http://c-faq.com/decl/spiral.anderson.html找到。

這將評估第一個是一個指針數組。 第二個是指向固定大小數組的指針。

數組衰減到指針。 所以,它適用於第二種情況。 在第一種情況下,函數參數是指針數組,但不是指向序列中第一個元素的整數的指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM