int main( int argc, int *argv[])和int main(int argc, int **argv)的区别

zheguzai000 2011-09-23 11:52:49
int main( int argc, int *argv[]) 和 int main(int argc, int **argv) 的区别是什么?一道笔试题目
...全文
243 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
Roy_Smiling 2011-09-28
  • 打赏
  • 举报
回复
其實我是來打醬油的餓哦
qlz37238 2011-09-28
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 findstr 的回复:]
本质上木有区别,在理论上的区别就是
用char * argv[]时(*argv)指向的值不能改变,而另一种方式(*argv)指向的值可以被改变!
[/Quote]



#include <stdio.h>
int main(int argc,char *argv[]) //int main(int argc,char **argv)
{
printf("%s\n",argv[1]);
strcpy(argv[1],"def");
printf("%s\n",argv[1]);
return 0;
}



上面的两种形式。都可以改变值 。

但是在K&R里面说过数组作为参数传递是没区别的
薛定谔之死猫 2011-09-28
  • 打赏
  • 举报
回复
对调用者木有区别,对实现着有区别,区别就是指针常量和指针变量滴区别,一般地,没有哪个神经病想去直接修改命令行参数,所以也就木有区别。
AnYidan 2011-09-24
  • 打赏
  • 举报
回复
int *argv[] // 指针树组

int **argv // 指针的指针

看哪个更能表明你的意思
modicum_ck 2011-09-24
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 modicum_lf 的回复:]
在这里没有区别!
在别的地方还是又区别的!
[/Quote]

做形参指针数组 和 指针的指针(二级指针)没区别。
pengzhixi 2011-09-24
  • 打赏
  • 举报
回复
char*[]这样的数组弱化之后就是char**
harizu76 2011-09-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhao4zhong1 的回复:]
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
[/Quote]

学习了。谢谢
geochway 2011-09-24
  • 打赏
  • 举报
回复
形式上有点区别,实质上没有区别。
wizard_tiger 2011-09-24
  • 打赏
  • 举报
回复
这两个没什么区别,只是一个是指针数组,一个是二级指针。
didijiji 2011-09-24
  • 打赏
  • 举报
回复
用起来没区别,深究起来还是有区别的。
pathuang68 2011-09-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 zheguzai000 的回复:]
int main( int argc, int *argv[]) 和 int main(int argc, int **argv) 的区别是什么?一道笔试题目
[/Quote]

应该是:

int main( int argc, char *argv[]) //和
int main(int argc, char **argv)


在使用上,两者没有什么区别。但在某些C++标准里面,给出main的两种标准写法是:

int main(void)
int main(int argc, char** argv)

言下之意,其它的写法都不标准。有些公司的面试,会考这样的问题。
aronic 2011-09-24
  • 打赏
  • 举报
回复
数组与指针的差异
alefthook 2011-09-23
  • 打赏
  • 举报
回复
2个参数名字一样其实没关系的吧
alefthook 2011-09-23
  • 打赏
  • 举报
回复
int main( int argc, int *argv[])= int main( int , int *[])
int main(int argc, int **argv)=int main(int , int **)
对吧
zhoudianlong 2011-09-23
  • 打赏
  • 举报
回复
以下是个人的想法。如果有不对的地方请指正。

int main( int argc, int *argv[])
这个函数第二个参数指向的是一个数组的首地址。即argv[0]的地址。
int main(int argc, int **argv)
这个函数的第二个参数指向的是一个argv指向的地址的内容做地址的一个地方。
例如:*argv指向1 :[123]。**argr指向的是以123为地址里面的内容。
  • 打赏
  • 举报
回复
等价
没区别
F0X_OO7 2011-09-23
  • 打赏
  • 举报
回复

他们的区别就是没区别

我肯定没错

hukui161 2011-09-23
  • 打赏
  • 举报
回复
木有区别。
辰岡墨竹 2011-09-23
  • 打赏
  • 举报
回复
单就这两个函数来说,没区别。
dfatfat 2011-09-23
  • 打赏
  • 举报
回复
没区别
*(argv+1)=argv【1】
加载更多回复(11)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧