gpt4 book ai didi

c - C 程序中整数的奇怪行为

转载 作者:行者123 更新时间:2023-11-30 18:22:20 25 4
gpt4 key购买 nike

编辑:感谢您提供上一个 StackExchange 问题的链接,答案是 a[b] 定义为*(a+b),使得“a”[0] = 0[“a”] = *(“a”+0)。我想这有效是因为“a”是一个指针?所以我不能说:

int i;
i[0];

但我可以说:

int i;
i["a"];

我试图了解这段代码到底是如何编译的以及发生了什么。任何提示将不胜感激。另外,如果您知道有助于理解 C 语言实际情况的良好引用资料,请随时将其交给我。

代码在这里:

int i;
main()
{
int j;
int k;
j=i["a"]; //printf says j is 97!
k=i["b"]; //printf says k is 98!
}

所以...到底发生了什么事?我将“i”声明为整数,然后将其视为没有编译错误/警告的数组,并且输入一个字符串作为数组的参数,仍然没有问题?有人有主意吗?提前致谢。

最佳答案

是的,正如 Michael 在评论中提到的,这实际上是有效的 C。 array[1] 相当于 *(array + 1),而 *(array + 1) 相当于 1[array]

就您而言,i["a"] 相当于 0["a"] 相当于 "a"[0]“a”。当然,97 是 ASCII 的“小写 a”。

有关 C 索引运算符的更多信息,请参见:http://boredzo.org/pointers/#indexing

顺便说一句,如果您使用 gcc 或 clang,您可以使用 -Wall -Wextra -pedantic 编译代码以查看所有编译器警告(而不是超出您的预期,我认为)。

关于c - C 程序中整数的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24001377/

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