char** x做形参解析

时间:2022-11-28 21:36:52

 

   一、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