繁体   English   中英

我在我的printf函数中使用了* pointer + 1,但并没有得到我认为的结果。 为什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM