[英]I used *pointer+1 in my printf function and it didn't turn out what i thought it would be . why?
这是我最近运行的C代码,但我得到了意想不到的结果
现在我期望的结果是“ o”,但结果是H ,我想知道为什么?
我的想法和我所知道的:-
我知道的是,在指针中存储的数据是一个数字,它指向我们倾向于指向的位置。
例如:-如果我们将a声明为char *pointer
则C将为char *pointer
创建一些内存,如果我们将pointer = "GOKU"
则C将为该字符串在内存单元中的某个位置单独存储5位。 现在让存储G
的存储单元为50
因此在存储在存储单元100中的“指针”中将具有值50
。 因此,此指针位于第100
个存储单元的位置,其值为50
,该值指向GOKU的'G'字符。
我以为如果我将指针增加1,那么它将跳到将存储O的内存位置51,但事实并非如此。 事实证明,当我将指针增加1时,会发生某些事情,并且它会响应H(按字母顺序以及ASCII表排在G旁边)。 我进行了几次测试,但无法从程序的输出中得到E
我知道我可以使用索引作为获取,但是我仍然想知道为什么会这样。
谢谢
#include <stdio.h>
#include <string.h>
int main(){
char *pointer = "GOKU";
printf(" %c ", *pointer+1);
return EXIT_SUCCESS;
}
指针取消引用运算符*
优先级高于加法运算符+
优先级。 所以这:
*pointer+1
是相同的:
(*pointer)+1
您正在做的是首先取消对pointer
引用,从而给您字符'G'
。 然后,您将该值加1即可得到'H'
。
如果要添加到指针,则需要添加括号:
*(pointer+1)
这将使指针增加1, 然后取消对指针的引用以得到'O'
。
顺便说一句,以上内容与以下内容相同:
pointer[1]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.