我有這樣的代碼:當`char first_word [MAX_LENGTH + 1] =「test」;`,是first_word是一個指針還是一個字符串?
char first_word[MAX_LENGTH + 1] = "test";
printf("Word to input: %s\n", first_word);
printf("Word to input: %p\n", first_word);
它成功地打印出兩個(打印字符串「Test」,然後一個地址)。
在我的代碼,我最終做到這一點:
char *arr_of_strings[MAX_LENGTH + 1];
arr_of_strings[0] = first_word;
,並正確地設置arr_of_strings[0]
到任何first_word
是(在這種情況下是一個指針,因爲*arr_of_strings
是一個指針數組,對吧?)。但現在,當我做
printf("arr at 0 is: %s\n", arr_of_strings[0]);
它再次打印字符串,可我還可以打印地址,像這樣:
printf("arr at 0 is: %p\n", arr_of_strings[0]);
所以當不C使用first_word
爲一個字符串,當它用它作爲指針?
奇怪的是,您的代碼已經回答了您的問題。每個'first_word'都是一個指向字符串第一個字符的指針。您在'printf'行中混淆了'first_word',但'%s'已經告訴編譯器,關聯變量保存指向字符串第一個字符的指針,而不是字符串本身。所以,'arr_of_strings [0]'是一樣的:當與'%p'一起使用時,它打印它的指針值;當與'%s'一起使用時,它會打印指向的字符串。 – ssd
'first_word'是一個'char'數組。該類型是'char [MAX_LENGTH + 1]'。當作爲表達式計算時,指向第一個元素('&first_word [0]')。 C字符串是一個以NUL字符結尾的字符序列。因此,指針點是否爲C-String取決於它是否以NUL結尾的一系列字符。 – BLUEPIXY