簡體   English   中英

初始化一個指向字符指針的指針並初始化一個指針數組,每個指針指向一個字符指針

[英]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.

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