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

来源:互联网 发布:在线c语言编译器浙大 编辑:程序博客网 时间:2024/06/06 13:02

  前几天在做修改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!头都晕了,学习理科就是悲剧。不知道讲清楚没

  



 

原创粉丝点击