有寫錯的地方,請幫忙糾錯,感謝~數組
main方法的第二個參數是指針數組,存儲的都是指針,因此每一個元素的地址都是char **
類型函數
字符串打印的時候,會自動截止到0
字符指針
數組的名字是指針,表明第一個元素的地址code
指針數組:首先它是一個數組,數組的元素都是指針,數組佔多少個字節由數組自己決定。它是「儲存指針的數組」的簡稱。
數組指針:首先它是一個指針,它指向一個數組。在32 位系統下永遠是佔4 個字節,至於它指向的數組佔多少字節,不知道。它是「指向數組的指針」的簡稱。字符串
參數char *argv[]
是一個指針數組,存儲的是每一個傳遞過來的參數的地址。argv
是數組名稱,表明第一個元素[0]的地址,也是一個指針,類型是char **
。那麼*argv
就表明第一個元素的值,類型是char *
是一個指針,這個指針指向的是第一個參數的首地址。而第一個參數確定是字符串,因此進行獲取的時候,printf經過該字符串的首地址,就能夠打印出整個字符串命令。string
#include <stdio.h> int main(int argc, char *argv[]) { printf("%d%s\n", argc,*(argv+1)); }
循環遍歷打印全部接收到的參數io
#include <stdio.h> int main(int argc, char *argv[]) { for(int index = 0; index < argc; index++) { /* argv自己表明`char *argv[]`的第一個元素的地址,地址進行遞增能夠遍歷數組,而後經過`*`來獲取改地址對應的元素內容(這裏元素的內容也是個地址)*/ printf("%s\n", *(argv+index)); } }
有關於字符串根據首地址輸出打印整個字符串以及特殊0
字符循環
#include <stdio.h> /* 字符串操做 */ #include <string.h> int main(int argc, char *argv[]) { char str[] = "hello\0 world"; /* str 在這裏是一個指針,是字符串數組的第一個元素的地址 */ printf("%d\n", &str[0] == str); /* 那麼爲何printf打印一個地址的時候,會將整個字符串打印出來呢?*/ /* 由於在存儲字符串的時候,會將自動在字符串的最後添加一個\0,printf打印到\0截止 */ printf("%s\n", str); /* 若是這樣定義字符串數組,須要後面添加\0 */ /* 只有字符串數組能夠一直尋址到\0 */ char arr[] = {'a','b','c','\0'}; printf("%c\n", arr[0]); printf("%s\n", arr); /* 字符串數組的長度,不包含\0 */ printf("%lu\n", strlen(arr)); }