指向指针的指针 指向数组的指针 指向指针的数组

  前几天在做修改Android的init进程的时候,遇到了一个函数

  int do_insmod(int nargs, char **args)

  这个函数怎么掉用呢?我定义了一个数组

  char test[][10]={

                    “test“,

                    ”/system/lib/modules/***.ko“

  }

  do_insmod(0, (char **)test);

  然后在int do_insmod(int nargs, char **args)函数中进行打印

  printf(”%s\n“,args[1]);

  我梦想中是要打印出/system/lib/modules/***.ko的可是怎么滴,系统挂了……

  搞了一天,囧 问题没有解决,后来我需要的加载驱动的这个功能被我用脚本实现了就没管它了。

  今天又遇到了女盆友问我这个参数该怎么传?

  555必须搞定,不然回家跪搓衣板!

  先说一下标题的”指向指针的指针“这也就是int do_insmod(int nargs, char **args)参数args需要的东东 就是args本身是一个指针它所指向的也是一个指针(char *),而我定义了一个二位数组(老想着是一样的),我传过来的是test这个二维数组的首地址,而args【1】这其实是第零行滴4列的地址(args是指向指针的指针,所以它的+1或者下标+1,都是加了sizeof(char *)4个字节而不是sizeof(char)),如果我用%c打印而不是用%s他就不会挂,当然也什么东东都打印不出来。

其实不一样!它的本质是”指向数组的指针“

  我们想在int do_insmod(int nargs, char **args)这个函数里面实现类似对test这个数组的打印,比如

  printf(”%s\n“,args[1]);

  printf(”%c\n“,args[1][2]);

 就需要定义”指向指针的数组“

  char *test[]={

                    “test“,

                    ”/system/lib/modules/***.ko“

  }

    do_insmod(0, test);

  这样调用  

  printf(”%s\n“,args[1]):/system/lib/modules/***.ko;

  printf("%s\n",*(args+1)+7):/lib/modules/***.ko;

  就会打印我想要的结果

  当然如果你非要使用二位数组

  那么函数就得重写

  int do_insmod(int nargs, char (*args)[10])

  当然我可没有权利去修改函数的参数,就只能老老实实的写该我的传入内容咯!

  oh!头都晕了,学习理科就是悲剧。不知道讲清楚没

  



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值