这是我最近运行的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;
}
答案 0 :(得分:3)
指针解除引用运算符*
的优先级高于加法运算符+
。所以这个:
*pointer+1
与:
相同(*pointer)+1
您正在做的是首先取消引用pointer
,为您提供角色'G'
。然后,您为该值添加1,以便为您'H'
。
如果要添加到指针,则需要添加parenetheses:
*(pointer+1)
这会将指针递增1,然后取消引用指针,为您提供'O'
。
顺便说一下,上面的内容与:
相同pointer[1]