void *buf
void buf 是定义了一个空指针,因为程序里有些数据的类型不确定,所以先定义一个空指针来指向它, 最后使用的时候再做类型强制转换, 如: (int)buf 或 (char*)buf
举个例子:
void *malloc(size_t size)
内存动态分配函数malloc的返回值就是一个空指针
用法如下:
void *buf ;
int* ptr;
buf = malloc(10*4);
ptr = (int*)buf; //或者 ptr = (int*)malloc(10*4)
int argc,char **argv;
char **argv 也可以写成 char *argv[ ] 还可以写成 char argv[ ][ ],一样的效果,其目的时接受命令行的参数。
比如说你的程序时这样:
while( i < argc){
printf("argv[%d]: ", i);
printf("%s\n", argv[i]);
i++;
}
你在cmd中运行这个程序, print.exe hello, world.
那么输出应该是:
argv[0]: …../print.exe(路径)
argv[1]: hello,
argv[2]: world.
其中argc = 2, argv 就是二位数组保存了你输入的参数。
指向指针的指针,argc表示命令的个数,argv【】【】是一个二维字符数组,也就是字符串数组,表示一系列命令.
我们经常用的main函数都是不带参数的,因此main后的括号都是空括号。实际上,main函数可以带参数,这个参数可以认为是main函数的形式参数。C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv。
main(int argc,char **argv)
argv为指针的指针
argc为整数
char **argv or: char *argv[ ] or: char argv[ ][ ]
main()括号内是固定的写法。
下面给出一个例子来理解这两个参数的用法:
假设程序的名称为prog,
1.当只输入prog,则由操作系统传来的参数为:
argc=1,表示只有一程序名称。
argc只有一个元素,argv[0]指向输入的程序路径及名称:./prog
2.当输入prog para_1,有一个参数,则由操作系统传来的参数为:
argc=2,表示除了程序名外还有一个参数。
argv[0]指向输入的程序路径及名称。
argv[1]指向参数para_1字符串。
3.当输入prog para_1 para_2 有2个参数,则由操作系统传来的参数为:
argc=3,表示除了程序名外还有2个参数。
argv[0]指向输入的程序路径及名称。
argv[1]指向参数para_1字符串。
argv[2]指向参数para_2字符串