一、char** x做形,传入前的理解:
int pthread_join(pthread_t tid,void** rva_ptr)
此函数功能:阻塞调用线程,直到指定的线程终止,rva_ptr是线程退出 返回值的指针。
一般都会这样写程序调用:
int ret;
pthread_t tid;
void* rva_ptr;
.......
ret=pthread_join(tid,&rva_ptr);
为什么这么传呢?
我的理解是,形参是往函数里传的,不管是传入一值给里面的函数用,或是将里面的一个结果拿出来,作为一个形参,都是从外接收值的。
很明显,pthread tid,是往函数传入一个pthread类型的值tid,因为里要用到这个线程标识符。
void** rva_ptr,是往里传入一个二级指针变量里的一个值,即一个指针变量的地&rva_ptr,也是函数里面要用到这个地址,主要是用到地址上面的那个变量rva_ptr,这是一个地址变量,所以返回值就存在这里,因为返回值就是一个地址。
二、char** x作形参,传入后
int main(int argc,char** argv)
上面这行指令等于int main(int argc,char* argv[])
具体原理我也讲不清楚,但我知道怎么用,char** argv 和数组的数组(就是人们常误解的多维数组)是一样的,至少在这里是一样的。
argv就是这个数组的首地址。
所以输入./test.c test1 test2 test3 test4
printf("%s\n",argv[0]); 等效于 printf("%s\n",*(argv));
printf("%s\n",argv[1]); printf("%s\n",*(argv+1));
printf("%s\n",argv[2]); printf("%s\n",*(argv+2));
printf("%s\n",argv[3]); printf("%s\n",*(argv+3));
printf("%s\n",argv[4]); printf("%s\n",*(argv+4));
输出结果都为:
./test.c
test1
test2
test3
test4
同样如果是想用字符串里的单个字符时:
printf("%c\n",argv[1][0]); = printf("%c\n",*(argv+1)[0]);
输出都为:
t