| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1843 人关注过本帖
标题:指针数组数组名的使用,还没懂,帮忙啊
只看楼主 加入收藏
yi157
Rank: 1
等 级:新手上路
帖 子:151
专家分:0
注 册:2008-6-3
收藏
 问题点数:0 回复次数:14 
指针数组数组名的使用,还没懂,帮忙啊
书上有个程序这样的:
#include <stdio.h>
main(int argc,char *argv[])
{
while(argc-->1)
{++argv;printf("%s",*argv);}
}
程序中argv是数组名吧,它表示的是argv[0]的地址,是常量,那又怎么能对它进行自加运算呢?

[[it] 本帖最后由 yi157 于 2008-9-27 14:42 编辑 [/it]]
搜索更多相关主题的帖子: 指针 
2008-09-25 12:31
守鹤
Rank: 4
来 自:山東臨沂
等 级:贵宾
威 望:12
帖 子:337
专家分:0
注 册:2008-6-20
收藏
得分:0 
应该是 main(int argc,char *argv)


其中第一个参数是字符数的个数,第二个是指向字符数组的指针变量,

若是一个常量,则应声明为 #define   常量名   常数;
对指针变量的数据操作时,其实操作的是地址;

++argv就是将argv的地址再加1的操作,即取字符数组的第二数据的地址;
2008-09-25 13:40
lingluoz
Rank: 2
来 自:苏州科技学院
等 级:新手上路
威 望:4
帖 子:749
专家分:0
注 册:2008-2-2
收藏
得分:0 
*argv[]

argv的形式是这样的
表示argv是一个指针(不是一个数组名) 指向一个字符串数组的指针

argv另外的一种表达方式就是char **argv这样就比较容易理解了 是一个双指针和*argv[]一样

Murphy's Law :
If there are two or more ways to do something, and one of those ways can result in a catastrophe, then someone will do it.
2008-09-25 13:54
hgrhgy
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-9-22
收藏
得分:0 
main()主函数
   每一C 程序都必须有一main()函数, 可以根据自己的爱好把它放在程序的某
个地方。有些程序员把它放在最前面, 而另一些程序员把它放在最后面, 无论放
在哪个地方, 以下几点说明都是适合的。
   1. main() 参数
   在Turbo C2.0启动过程中, 传递main()函数三个参数: argc, argv和env。
    * argc:  整数, 为传给main()的命令行参数个数。
    * argv:  字符串数组。
             在DOS 3.X 版本中, argv[0] 为程序运行的全路径名; 对DOS 3.0
             以下的版本, argv[0]为空串("") 。
             argv[1] 为在DOS命令行中执行程序名后的第一个字符串;
             argv[2] 为执行程序名后的第二个字符串;
             ...
             argv[argc]为NULL。
    *env:  安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符
串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应值如C:\DOS, C:
\TURBOC(对于PATH) 或YES(对于87)。
   Turbo C2.0启动时总是把这三个参数传递给main()函数, 可以在用户程序中
说明(或不说明)它们, 如果说明了部分(或全部)参数, 它们就成为main()子程序
的局部变量。
   请注意: 一旦想说明这些参数, 则必须按argc, argv, env 的顺序, 如以下
的例子:
    main()
    main(int argc)
    main(int argc, char *argv[])
    main(int argc, char *argv[], char *env[])
   其中第二种情况是合法的, 但不常见, 因为在程序中很少有只用argc, 而不
用argv[]的情况。
   以下提供一样例程序EXAMPLE.EXE,  演示如何在main()函数中使用三个参数:
    /*program name EXAMPLE.EXE*/
    #include <stdio.h>
    #include <stdlib.h>
    main(int argc, char *argv[], char *env[])
    {
         int i;
         printf("These are the %d  command- line  arguments passed  to
                 main:\n\n", argc);
         for(i=0; i<=argc; i++)
           printf("argv[%d]:%s\n", i, argv);
         printf("\nThe environment string(s)on this system are:\n\n");
         for(i=0; env!=NULL; i++)
              printf(" env[%d]:%s\n", i, env);
    }
   如果在DOS 提示符下, 按以下方式运行EXAMPLE.EXE:
   C:\example first_argument "argument with blanks"  3  4  "last  but
one" stop!
   注意: 可以用双引号括起内含空格的参数, 如本例中的:   "  argument
with blanks"和"Last but one")。
   结果是这样的:
    The value of argc is 7
    These are the 7 command-linearguments passed to main:
    argv[0]:C:\TURBO\EXAMPLE.EXE
    argv[1]:first_argument
    argv[2]:argument with blanks
    argv[3]:3
    argv[4]:4
    argv[5]:last but one
    argv[6]:stop!
    argv[7]:(NULL)
    The environment string(s) on this system are:
    env[0]: COMSPEC=C:\
    env[1]: PROMPT=$P$G            /*视具体设置而定*/
    env[2]: PATH=C:\DOS;C:\TC      /*视具体设置而定*/
  
    应该提醒的是: 传送main() 函数的命令行参数的最大长度为128 个字符 (包
括参数间的空格),  这是由DOS 限制的。
2008-09-25 13:55
yi157
Rank: 1
等 级:新手上路
帖 子:151
专家分:0
注 册:2008-6-3
收藏
得分:0 
回复 2# 守鹤 的帖子
没错啊,书上的函数原型是这样的main(int argc,char *argv[])
2008-09-25 13:56
lingluoz
Rank: 2
来 自:苏州科技学院
等 级:新手上路
威 望:4
帖 子:749
专家分:0
注 册:2008-2-2
收藏
得分:0 
argv是一个指向char类型的指针数组
argv[0] 指向第一个命令行字符串
argv[1] 指向第二个命令行字符串
就是这样...刚才我弄糊涂了:P

[[it] 本帖最后由 lingluoz 于 2008-9-25 14:10 编辑 [/it]]

Murphy's Law :
If there are two or more ways to do something, and one of those ways can result in a catastrophe, then someone will do it.
2008-09-25 14:04
J_j
Rank: 1
等 级:新手上路
威 望:1
帖 子:100
专家分:0
注 册:2008-8-21
收藏
得分:0 
main(int argc,char *argv[]) 这里,argc 是main的第一个形参,在命令行的参数个数就是用他来表示;*argv[]是main的第二个参数,它是一个指向字符串的指针数组,那么argv可以表示这个数组名,即与argv[0]等价,同时argv[0]也是一个指针,它指向在命令行中输入的首个字符串。所以++argv事正确的。
2008-09-25 14:06
守鹤
Rank: 4
来 自:山東臨沂
等 级:贵宾
威 望:12
帖 子:337
专家分:0
注 册:2008-6-20
收藏
得分:0 
回复 1# yi157 的帖子
不好意思,打字的时候丢了一个 *,抱歉啊
2008-09-25 14:08
yi157
Rank: 1
等 级:新手上路
帖 子:151
专家分:0
注 册:2008-6-3
收藏
得分:0 
回复 3# lingluoz 的帖子
argv应该是表示数组名吧,argv[i]才表示指针(i表示整数),即argv[i]是指针数组的一个元素,而该元素是一个指向一字符串的的指针..
2008-09-25 14:11
yi157
Rank: 1
等 级:新手上路
帖 子:151
专家分:0
注 册:2008-6-3
收藏
得分:0 
回复 6# lingluoz 的帖子
argv是一个指向char类型的指针数组
argv[0] 指向第一个命令行字符串
argv[1] 指向第二个命令行字符串
就是这样...刚才我弄糊涂了:P

[ 本帖最后由 lingluoz 于 2008-9-25 14:10 编辑 ]


对啊..
2008-09-25 14:13
快速回复:指针数组数组名的使用,还没懂,帮忙啊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029539 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved