1.欢迎来到我的酒馆
讨论c语言中,main函数参数:char**argv与char*argv[]。
2.char**argv与char*argv[]
2.1 char** argv
#include <stdio.h>
int main(int args,char** argv) {
printf("Hello World!\n");
return 0;
}
2.2 char* argv[]
#include <stdio.h>
int main(int args,char* argv[]) {
printf("Hello World!\n");
return 0;
}
它们之间,没有区别。 THEY’RE EXACTLY THE SAME THING!
3.数据类型
3.1 char ** argv,它是一个 “pointer to pointer” 类型。
编译下面的程序,
#include <stdio.h>
int main(int args,char** argv)
{
int i=0;
while(*argv!=NULL){
printf("argv[%d]=%s\n",i++,*argv++);
}
return 0;
}
在内存中,形参argv的示意图:
char** argv;声明了一个"pointer to pointer" 类型的变量,变量是用来存储数据用的。
argv变量在栈内存开辟了一块内存空间首地址为 “0x6614d0”,这块内存空间的 “别名” 叫做 argv。
argv变量存储的是一个指针类型的数据,也就是内存地址。指向了字符串常量的一块内存空间:“0x6615a0”。
3.2 char*args[] 它是一个"array of pointers"类型。
编译下面的程序:
#include <stdio.h>
int main(int args,char* argv[]) {
int i;
for (i = 0; i < args; ++i) {
printf("argv[%d]=%s\n",i,argv[i]);
}
return 0;
}
在内存中,形参argv示意图:
char* argv[],指针数组,这个数组名叫做argv,数组的每一项元素是char*类型。
argv变量在栈内存开辟了一块内存空间,首地址为:“0xaa14e0”,这块空间的别名叫做argv[0]。
argv[0]即数组下标为0的元素存储了一个char*类型的变量,这个变量值为:“0xaa15b0”,指向了字符串常量的一块内存空间。