簡體   English   中英

char* arrays 的隱含衰減是什么?

[英]What is the implicit decay of char* arrays?

作為一個新手,我正在解決 K&R 的指針章節中的一個問題,並且對字符指針的某些方面感到困惑,並將一個 char* 類型的數組作為 function 參數傳遞。

我明白的字符數組衰減

前任:

    void main( )
    {
        char a[ ] = "Howdy";

        tryMe(a);
    }

所以這里傳遞的 function 參數是&a[0]

    void tryMe( char* s  )
    {
        printf("value I need: %c \n", *s);
    }

所以這將是s = &a[0];

現在使用上述理解,我嘗試對 char* 類型的數組執行相同的操作。 使用相同的 function tryMe(char*)

前任::

    char a[ ] = "Howdy";
    char b[ ] = "Doodie";

    char* a1 = a;
    char* b1 = b;

    char* AP[ ] = { a1 , b1 };

    //  now to pass array AP into the function tryMe::

   tryMe(AP);

這是我收到警告的地方:

警告:從不兼容的指針類型 [-Wincompatible-pointer-types] 傳遞“tryMe”的參數 1

我不確定發生了什么,但我確實通過執行以下操作使其正常工作:

從更改 function 定義

tryMe(char*) 到 tryMe(char**)

這很好用。

另一個有效的解決方案是:

Function 定義保持不變::

無效 tryMe(char*)

但是在傳遞 function 參數時,它如下所示:

    void tryMe( char* s[ ]  )
    {
       ;
    }

盡管上述這些更改按我的意願工作,但我不知道它們為什么工作

我真的很感激任何關於這些的指導。

char* AP[ ] = { a1, b1 }; AP定義為包含兩個char *的數組。 所以AP不是一個char數組。 tryMe(AP); ,數組AP被轉換為指向其第一個元素&AP[0]的指針。 由於它的第一個元素是char * ,指向它的指針具有char **類型。

char **不適合作為char *類型參數的參數傳遞,因此編譯器會抱怨。

要傳遞 arrays 之一(通過指向其第一個元素的指針),您可以使用tryMe(AP[0])tryMe(AP[1])

如果您將 function 定義更改為具有char **類型的參數,那么例如char **x ,當您傳遞AP時,function 將收到指向AP的第一個元素的指針。 要獲取相關數組中的字符,它必須多次取消引用指針: x是指向char *的指針, *xchar ***x是一個字符。

或者, x是指向數組第一個元素的指針, x[0]x[1]是該數組中的char *元素, x[0][0]是指向的字符串的第一個字符第一個char *x[1][4]是第二個char *指向的字符串的第四個字符,依此類推。

暫無
暫無

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

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