gpt4 book ai didi

c - 需要对带有指向字符串文字的指针数组的指针算术进行解释

转载 作者:行者123 更新时间:2023-11-30 14:42:14 24 4
gpt4 key购买 nike

我目前正在尝试学习 C,之前有一些 Python 经验,指针算术现在真的让我很困惑。

#include <stdio.h>


int main()
{
char *s[] = {"String1", "Literal2", "Pointers3"};
printf("%c", s[1]+1);
return 0;
}

为什么它打印 m 而不是 i

当我用 %s 替换格式字符串时,它会按照我的预期打印出 iteral2(转到第一个字符串文字的第 0 个索引,然后移动 1 个内存地址向前并打印其余部分)。

这是如何工作的,当我使用 %c 格式字符串时,为什么它打印出看似任意的字符而不是第一个(或第一个?)索引。

最佳答案

%c 格式说明符需要一个字符,而不是指向字符的指针。表达式 s[1] 计算结果为指向字符的指针,指向“Literal2”,表达式 s[1]+1 计算结果也为指向字符,指向“iteral2”。

因此,您将 printf() 传递给一个字符的指针,并告诉它打印一个字符。因此,发生的情况是指针被重新解释为字符,并且输出是垃圾。

如果你在“String1”中插入一个字符(例如,“String11”),那么所有内容都会在内存中向上移动一个位置,因此指针的值将增加 1,所以它可能会打印 n 而不是 m

要获取字符,当您拥有的只是指向字符的指针时,您需要取消引用该指针。因此,这将是 "%c", *(s[1]+1)

关于c - 需要对带有指向字符串文字的指针数组的指针算术进行解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54494319/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com