首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >++*argv、*argv++、*(argv++)和*(++argv)的差异

++*argv、*argv++、*(argv++)和*(++argv)的差异
EN

Stack Overflow用户
提问于 2014-11-13 06:12:22
回答 4查看 2.5K关注 0票数 0

目前,我正在学习C,并试图使我的头脑围绕这些指示。他们真的不一样吗?

代码语言:javascript
复制
++*argv

*argv++

*(++argv)

*(argv++)

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-11-13 06:29:18

比指针去引用操作符具有更高优先级的是后缀增量运算符,而不是前缀增量。所以这两者是等价的:

代码语言:javascript
复制
*p++  *(p++)

前缀增量与*具有相同的优先级,因此*++p增加指针,并且与*(++p)相同。此外,++*p与++(*p)相同。

票数 4
EN

Stack Overflow用户

发布于 2014-11-13 06:25:03

看看下面的代码。

代码语言:javascript
复制
main()
    {

       int a[4] = { 10,20,30,40};
       int *argv = a;
       t = ++*argv; 
       printf("%d\n",*argv); /* Here *argv is 11 */
        printf("%d\n",t); /* Here t is 11 because of pre-increment */

       *argv++; /* argv is incremented first ++ has higher priority over "*" */ 
       printf("%d\n",*argv);/* *argv is printed which is 20 */

       *(++argv); /* argv is incremented first ++ has higher priority over "*" */ 
       printf("%d\n",*argv); /* *argv is 30 */

       *(argv++); /* As explained above the same applies here also */
       printf("%d\n",*argv);
    }
票数 2
EN

Stack Overflow用户

发布于 2017-07-16 12:30:04

两个递增的小例子。

小贴士:为了更好的理解,试着把argc想象成1或2。

后增量

在下面的程序中,所有参数都被打印为,包括程序名 argv[0]

代码语言:javascript
复制
int
main(int argc, char **argv)
{
    while (argc--)
        printf("%s\n", *argv++); /* same as *(argv++) */
}

预增量

在下面的程序中,除了程序名 argv[0]之外,所有参数都是打印的。

代码语言:javascript
复制
int
main(int argc, char **argv)
{
    while (--argc)
        printf("%s\n", *(++argv));
}

++*argv会增加值*argv

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26902462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档