有写错的地方,请帮忙纠错,感谢~数组
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)); }