看下面的代碼段,C語言中的array已經是一個保存陣列第一個元素地址的指標,那么為什么argv
變數需要星號呢?
char *argv[3];
argv[0] = "echo";
argv[1] = "hello";
argv[2] = 0;
exec("/bin/echo", argv);
printf("exec error\n");
uj5u.com熱心網友回復:
argv
是指向 的指標陣列char
。所以argv[0]
是 a char*
, as is argv[1]
,等等。
您從被宣告的名稱向外讀取最高優先級運算子的型別。由于[]
(array operator) 比 (indirection) 具有更高的優先級*
,因此您將其讀取為:
argv
- ...是一個陣列 (
[]
) - ...指標 (
*
) - ...到
char
。
uj5u.com熱心網友回復:
C語言中的陣列已經是一個指標
不,當在大多數運算式中使用時,它“衰減”為指向第一項的指標。這不會使陣列成為指標。
但在這種情況下,這完全無關緊要,因為目的是創建一個指標陣列(指向字串文字)。
uj5u.com熱心網友回復:
C 中的陣列實際上并不是指標,但在許多情況下會衰減為指向陣列中第一個元素的指標。
在這種情況下,argv
是一個陣列char *
。所以每個陣列元素都可以保存一個指向字串開頭的指標。
uj5u.com熱心網友回復:
這個陣列宣告
char *argv[3];
宣告一個包含 3 個型別元素的陣列char *
。也就是說,陣列的元素是指標,這些指標(除了最后一個)分配有字串文字的第一個字符的地址
argv[0] = "echo";
argv[1] = "hello";
argv[2] = 0;
為了更清楚,您可以通過以下方式宣告陣列
char * ( argv[3] );
或者
char * ( argv )[3];
或者例如使用 typedef
typedef char * T;
T argv[3];
作業看起來像
argv[0] = &"echo"[0];
argv[1] = &"hello"[0];
argv[2] = NULL;
uj5u.com熱心網友回復:
char *argv[3]
是一個由 3 個字符指標組成的陣列。
換句話說, char *arg 將是單個 char 指標。單個字符指標可以是"hello".
int nums[3]
將是 3 個數字的陣列。nums[0] 可以是 1,nums[2] 可以是 2,nums[2] 可以是 3。
因此,char *argv[3]
是一個包含 3 個字符指標的陣列。它可以像您的示例一樣容納 3 個字符指標。
您可以在技術上使用char argv[][]
,并有一個包含字符陣列的陣列。我們不這樣做的原因是 char 陣列的長度是可變的,并且由于陣列需要嚴格定義的大小,我們希望這樣會遇到錯誤。使用指標可以讓我們擁有可變的大小,這正是我們想要的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/493276.html
上一篇:指向字串的指標陣列
下一篇:了解指標