指针增量与整数增量不同?

时间:2016-03-10 08:15:30

标签: c

我写了这段代码并观察了一个有趣的行为,如果有人可以评论为什么会发生这种情况会很棒!

int main()
{
    char *name = "ABCDEF";
    int i = 0;

    printf("\n Base address of name %u", name);
    printf("\n Address ++name %u", ++name);
    printf("\n Address name + 1 %u", name + 1);
    printf("\n Adddress name +2 %u", name + 2);
    printf("\n Base address of name %u", name);

    printf("\n i %d", i);
    printf("\n i+1 %d", i + 1);
    printf("\n i+2 %d", i + 2);
    printf("\n i+3 %d", i + 3);
    printf("\n i %d", i);

    return 0;
}

最后一行应返回未发生的原始指针值,也不像整数变量那样,如果指针是从前一个值发生的话,则添加的原始值为0。

enter image description here

2 个答案:

答案 0 :(得分:2)

关于N1570(Emphasis mine)中的前缀增量运算符:

  

6.5.3.1前缀增量和减量运算符

     

语义

     

2 前缀++运算符的操作数的值递增。   结果是增量后操作数的新值。该   表达式++ E等价于(E + = 1)。

也就是说,namename + 1执行后变为printf("\n Address ++name %u", ++name);,在最后一行显示4210689

顺便说一句,要打印指向对象的指针的值,即该对象的地址,您应该使用printf("\n Address ++name %p", (void *)++name);代替(但不包括指向函数的指针)。

答案 1 :(得分:1)

最后一行

printf("\n Base address of name %u",name);

打印name的内容打印其初始值, 在使用后增量运算符++name之间,它会将name的内容更改为副作用。