字符指针数组/字符串指针

starcat 2009-06-23 11:33:05
一个关于main()函数参数的问题。
如果按书上原来的写法,没有“[]”,argv是不是象我理解的是个字符串指针,执行++argv后指到某个字符串的'\0'后去了?argv不是指针数组名吗,也就是数组的首地址,是个常量,为什么可以自增运算?
例:
main(int argc,char *argv[]) /*“[]”不可省略,否则输出不对!*/
{ while(argc-->1)
printf("%s\n",*++argv);
}

本例是显示命令行中输入的参数。如果上例的可执行文件名为e24.exe,存放在A驱动器的盘内。因此输入的命令行为:
C:\>a:e24 BASIC foxpro FORTRAN
则运行结果为:
BASIC
foxpro
FORTRAN

附:用了一个很有意思的教材,经常放飞机,搞得还要要边看边调试书中的例题。
...全文
730 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
a704901117 2009-06-25
  • 打赏
  • 举报
回复
郁闷啊
nyeboy123 2009-06-24
  • 打赏
  • 举报
回复
*++argv <==> *(++argv) <==> *(argv+1) <==> argv[1]

maohuihua 2009-06-24
  • 打赏
  • 举报
回复
*argv[]
是字符串指针啦。。
argv++是指向下一个字符串。。。
酉阳书社 2009-06-24
  • 打赏
  • 举报
回复
数组做为形参后就退化为指针了
sun90cn 2009-06-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 starcat 的回复:]
补充一下,没有“[]”的时候也是可以运行的,但是只输出第二个参数,即BASIC。
[/Quote]
这是因为这样写则函数调用只调一个,而不是一个数组的全部内容,系统默认为第一个字符串,所以只输出第一个字符串。
tananade 2009-06-24
  • 打赏
  • 举报
回复
ding
飞天御剑流 2009-06-23
  • 打赏
  • 举报
回复
argv是不是象我理解的是个字符串指针,执行++argv后指到某个字符串的'\0'后去了?argv不是指针数组名吗,也就是数组的首地址,是个常量,为什么可以自增运算?
---------------------------------------------------------------------------------------------
你连书都没看完,就来搞这个.........

作为形参的argv会自动转换为与之等效的指针,在这里argv实际上是char ** argv,它指向的是指针,这些指针指向可执行文件的参数字符串。

由于argv是指针,当然可以自增运算。
starcat 2009-06-23
  • 打赏
  • 举报
回复
补充一下,没有“[]”的时候也是可以运行的,但是只输出第二个参数,即BASIC。
pengzhixi 2009-06-23
  • 打赏
  • 举报
回复
如果按书上原来的写法,没有“[]”,argv是不是象我理解的是个字符串指针,执行++argv后指到某个字符串的'\0'后去了?argv不是指针数组名吗,也就是数组的首地址,是个常量,为什么可以自增运算?

[]不可省略,char *arv[]是一个字符串指针数组.++argv表示从数组中的一个字符串指针移动到下一个字符串指针.
Arnold9009 2009-06-23
  • 打赏
  • 举报
回复
首先,常量是一个确定的值,或者是由const关键字定义的
其次,书上会由2中定义形式,char *argv[]或者char **argv,这两种形式之外的基本都是排版错误导致的

另外,指针的值虽然是地址,但也是可以参与一部分运算的,如指针自增、指针加法等

69,369

社区成员

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

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