我在我的printf函数中使用*指针+ 1并且它没有发现我认为它会是什么。为什么呢?

时间:2017-11-16 16:45:18

标签: c pointers

这是我最近运行的C代码,我得到的结果是我没想到的

现在我预期的结果是“o”,但我得到的结果是 H ,我想知道为什么?

我的想法和我所知道的: -

我所知道的是,在指针中存储的数据是一个指向我们倾向于指向的地方的数字。

例如: - 如果我们声明一个as char *pointer然后C将为指针创建一些内存 如果我们执行pointer = "GOKU",C将在存储器单元中的某个位置为该字符串创建一个5位的单独存储器。现在让存储G的存储单元为50,因此在**指针**中,假设存储在存储单元100中将具有值50。所以现在这个指向100存储单元的指针的值为50,指向GOKU的'G'字符。

我想如果我将指针增加1,那么它将跳转到存储位置51,其中存储O但是结果不是真的。事实证明,当我将指针增加1时会发生一些事情并且它会响应H,它按字母顺序和ASCII表一直落在G旁边。我运行了几次测试但无法获得E作为程序的输出。我知道我可以使用索引来获取,但我仍然想知道为什么会发生这种情况。

感谢

#include <stdio.h>
#include <string.h>

int main(){
char *pointer = "GOKU";

printf(" %c ", *pointer+1);
return EXIT_SUCCESS;
}

1 个答案:

答案 0 :(得分:3)

指针解除引用运算符*的优先级高于加法运算符+。所以这个:

*pointer+1

与:

相同
(*pointer)+1

您正在做的是首先取消引用pointer ,为您提供角色'G'。然后,您为该值添加1,以便为您'H'

如果要添加到指针,则需要添加parenetheses:

*(pointer+1)

这会将指针递增1,然后取消引用指针,为您提供'O'

顺便说一下,上面的内容与:

相同
pointer[1]