当我将指针递增1时,为什么我不能访问字符串中的下一个元素?

时间:2014-09-06 23:55:20

标签: c string pointers dereference

我正在尝试使用dereference运算符手动递增指向字符串的指针,就像我看到它在while循环中工作一样。它适用于第一个字符,但是当我尝试手动递增指针时,就像它在while循环中一样,它不起作用,我回到垃圾箱。有人可以告诉我我不理解的事吗?这段代码按我期望的方式工作。

char *pointToString = "some string or something"; 
printf("%c\n", *pointToString); // this returns the letter 's'
while(*pointToString != '\0'){
    printf("%c", *pointToString);
    *pointToString++;
}

这可以打印出's'然后打印出字符串“some string or something”,但是如果我手动增加它,为什么我不能访问字符串的第二个元素?当我这样做时,我得到了垃圾回收。

printf("%c\n", *pointToString+1);

这会返回字母“o”以外的内容。我也尝试了这个,但仍然有垃圾:

printf("%c\n", *pointToString+sizeof(char));

我不确定这是否正确但我认为我正在增加指针,就像我在while循环中所做的那样:

*pointToString++;

那为什么我不能单独这样做呢?

2 个答案:

答案 0 :(得分:2)

您无法使用表达式

访问下一个元素
printf("%c\n", *pointToString+1);

因为一元运算符*的优先级高于二进制+。首先,访问当前字符;然后,1被添加到其中。正确使用括号可以解决这个问题:

printf("%c\n", *(pointToString+1));

参考:Operator precedence table in C

答案 1 :(得分:1)

根据我的理解,这应该是你的解决方法:

*(pointToString++); // Iterates first, and then has the pointer point to the correct value

这就是你的一行:

*pointToString++; // Points to the value first and then iterates.

希望这会有所帮助。