[英]initialize a pointer to a character pointer and initialize an array of pointer each pointing to a character pointer
我在這里對我的代碼有疑問:
char a = 'A';
char b = 'B';
char c = 'C';
char *ad = &a;
char *ab = &b;
char *ac = &c;
char* cp[] = {ad, ab, ac};
char **d = &(cp[2]); // okay
// char **d[0] = &(cp[2]); //variant 1: error: invalid initializer
// char **d[] = &(cp[2]); //variant 2: error: invalid initializer
我不確定為什么 variant1 和 variant2 會導致錯誤。 對於最初的初始化(即注釋ok的那一行),沒有錯誤。 我的理解是我已經初始化了一個指針(即d),它指向一個指向一個字符的指針。 所以這似乎很好。
對於variant1,我認為(根據我的理解)我正在初始化一個指針數組,其中每個指針都指向一個指向字符的指針。 所以在這種情況下,我只初始化該數組中的第一個元素。
同樣對於variant2,我初始化了一個空的指針數組,每個指針都指向一個字符。
有人可以告訴我為什么這里的編譯器有錯誤嗎?
我對變體 1 的理解是否正確? 即 d 是一個指針數組,其中數組中的每個條目都將指向一個指向字符的指針? 我認為這是正確的。 那么為什么我無法初始化變體 1?
對於variant2,我還認為我有一個指針數組,每個指針指向一個指向字符的指針。
這編譯得很干凈......
char a = 'A';
char b = 'B';
char c = 'C';
char *ad = &a;
char *ab = &b;
char *ac = &c;
char *cp[] = {ad, ab, ac}; // be consistent
char **d = &cp[2];
char **e[1] = { &cp[2] }; // cannot dimension an array to have 0 elements
char **f[] = { &cp[2] }; // compilers count more accurately than people
請注意沒有不必要的“()”。
數組初始化器列在大括號內。 “{}”
最后一條語句的例外: char foo[] = "bar";
...“字符串”數組元素不需要大括號,除非你很傻:
char foo[] = { 'b', 'a', 'r', '\0', };
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.