char** x做形参解析

本文探讨了C语言中如何使用char**作为形参进行参数传递,包括pthread_join函数中void**的应用以及主函数中char**argv的实际作用。通过实例展示了如何正确理解和使用这些高级特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值