簡體   English   中英

C ++中指針數組的語法

[英]syntax for array of pointers in C++

因此,我看到動態分配指針數組的做法看起來像這樣:

int **array = new int *[10];

確實,使用語法:

int *array[] = new int *[10];

導致錯誤:

/Users/Malachi/Projects/playground/playground.gcc/src/pgccc-5/main.cpp:8: error: definition of variable with array type needs an explicit size or an initializer
    const char* test_array[];
                ^

無論如何,我總是更願意使用純指針語法。 但是,令我困擾的是這樣的代碼行:

int main(int argc, char *argv[])

是有效的。 我習慣於空數組括號[]或多或少地混淆為指針類型。 在我看來char *argv[]幾乎與我的int *array[]受相同的約束,那么為什么在一種情況下允許使用語法,而在另一種情況下不允許使用語法?

編輯:似乎更簡單的情況int array[] = new int[10]表現出相同的行為

這個:

int *array[] = new int *[10];

不是有效的語法。 左邊的原因是指向int的指針數組的類型,而右邊的原因是指向int 的指針的指針的類型。 因此,由於左側和右側的類型不同,因此分配不合法。

另一方面, 數組會衰減為指針 這意味着,當您以以下形式聲明函數時:

void foo(int* arr[])

編譯器將其視為:

void foo(int** arr)

上面的規則僅適用於函數,不適用於第一個示例中的分配。

我習慣於空數組括號[]或多或少地混淆為指針類型。

這僅在函數參數的聲明中有效。

void foo(int a[]);

是相同的:

void foo(int* a);

但是,在聲明或定義變量時,它們並不相同。

int a[] = {1, 2, 3}; // Valid. Array of 3 ints

與...不同

int* a = {1, 2, 3}; // Invalid syntax.

例外

您可以使用字符串文字來初始化char數組或char const*

char s1[] = "string 1";
char const* s2 = "string 2";

但是,您不能使用(無論如何都不能在C ++中使用):

char* s2 = "string 2";

這是因為函數參數聲明與變量聲明有所不同。

數組可以衰減為第一維的指針。

您可以使用int main(int argc, char *argv[]) []表示法通過聲明顯式表示該函數期望數組而不是指針。 它們的類型無關緊要:

void f(int* i[]) {}

也是合法的。 這說:“我想要一個指向整數的指針數組”。 比以下內容更具表現力:

void f(int** i) {}

暫無
暫無

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

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