*argv[]与**argv

qingu 2010-07-23 01:54:46
int main(int argc, char * argv[])和int main(int argc, char ** argv)
*argv[]与**argv相等、怎么解释。
谢谢哈
...全文
606 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
hyuanqing 2010-07-24
  • 打赏
  • 举报
回复
数组和指针,建议看一下《让你不再害怕指针》,你会完全明了

argv[] *argv 其实是一个妈妈生的
白云飘飘飘 2010-07-23
  • 打赏
  • 举报
回复
char * argv[], char ** argv
虽然二者本质上是一样的,但第一个表达的意义更清晰。
充电宝111 2010-07-23
  • 打赏
  • 举报
回复 1
C标准规定,作为函数的形参,[]退化为*
elated 2010-07-23
  • 打赏
  • 举报
回复
数组和指针在作函数参数时是一样的
qingu 2010-07-23
  • 打赏
  • 举报
回复
感谢各位的回答。
queatin_man 2010-07-23
  • 打赏
  • 举报
回复 1
*argv[]中,是个指针数组,还是数组指针了, 弄混了
**argv中,argv指向存放元素是char*数组的首地址

但是两个是一个意思,在内存中,都是同一个结构的内存
baihacker 2010-07-23
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zhangweiit 的回复:]
char *与char []
并不是完全对等的

char *s1 = "sss";
char s2[20] = "bbb";
这s2可以被修改,而s1就不行
因为s1指向的是一个字符常量的空间
而s2是在栈上开辟出来的20个字节的空间

s1的本质取决于他指向的内容

同样,char **与 char*[]与char [][]也有区别
char*可以用于表示char []……
[/Quote]

这里是在形参里。
zhangweiit 2010-07-23
  • 打赏
  • 举报
回复
char *与char []
并不是完全对等的

char *s1 = "sss";
char s2[20] = "bbb";
这s2可以被修改,而s1就不行
因为s1指向的是一个字符常量的空间
而s2是在栈上开辟出来的20个字节的空间

s1的本质取决于他指向的内容

同样,char **与 char*[]与char [][]也有区别
char*可以用于表示char [][]
char**可以用于表示char *[]
不过char[][]就不可以直接表示char**,反之亦然

归根结底就是,*的,只是做指向,
赵4老师 2010-07-23
  • 打赏
  • 举报
回复
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
眼睛猥琐男 2010-07-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wyz007134 的回复:]

*argv[]与**argv
这俩东西类型是一样的,虽然看起来一个是
char*构成的数组,即字符指针数组;一个是char**,即指向字符指针的指针。
但是在C中,数组即由指针定义,因此,两者指的是同一个东西
[/Quote]
vanchristin 2010-07-23
  • 打赏
  • 举报
回复
形参声明为char *argv[] 和char **argv,实参传进去的都是char **
只不过char *argv[]看起来更直观
you12321 2010-07-23
  • 打赏
  • 举报
回复
之前还真不知道这个,谢谢楼主了
tzcherish 2010-07-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 bing_bing 的回复:]

int main(int argc, char * argv[])更直观。前一个参数是个数,后一个弄个指针数组。数组大小和前一个的关系可以看出。
[/Quote]

+1
aozhi 2010-07-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lovesi3344 的回复:]

就好像
int *p = "abcd";
int a[] = "abcd";
这两种
[/Quote]

别误导别人,传参没区别,但初始化不一样。
bing_bing 2010-07-23
  • 打赏
  • 举报
回复
int main(int argc, char * argv[])更直观。前一个参数是个数,后一个弄个指针数组。数组大小和前一个的关系可以看出。
wyz007134 2010-07-23
  • 打赏
  • 举报
回复
*argv[]与**argv
这俩东西类型是一样的,虽然看起来一个是
char*构成的数组,即字符指针数组;一个是char**,即指向字符指针的指针。
但是在C中,数组即由指针定义,因此,两者指的是同一个东西
lovesi3344 2010-07-23
  • 打赏
  • 举报
回复
就好像
int *p = "abcd";
int a[] = "abcd";
这两种
zhangweiit 2010-07-23
  • 打赏
  • 举报
回复
char *argv 与 char argv[]相等
char **argv 与char *argv[]相等

这两者道理是一样的
本质上来说是:数组,可以用指向它首地址的指针来表示
gamemagic 2010-07-23
  • 打赏
  • 举报
回复
嗯是这么理解。前提是必须是形式参数
baihacker 2010-07-23
  • 打赏
  • 举报
回复
在C中,没有直接的数组参数。
vod foo(int arr[5]);
vod foo(int arr[4]);
上面的都一样,意思是传一个int*。
于是里面的数字没啥意思的,所以也允许[]。
总之,就是int*

69,369

社区成员

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

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