我正在尝试使用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++;
那为什么我不能单独这样做呢?
答案 0 :(得分:2)
您无法使用表达式
访问下一个元素printf("%c\n", *pointToString+1);
因为一元运算符*
的优先级高于二进制+
。首先,访问当前字符;然后,1
被添加到其中。正确使用括号可以解决这个问题:
printf("%c\n", *(pointToString+1));
答案 1 :(得分:1)
根据我的理解,这应该是你的解决方法:
*(pointToString++); // Iterates first, and then has the pointer point to the correct value
这就是你的一行:
*pointToString++; // Points to the value first and then iterates.
希望这会有所帮助。