gpt4 book ai didi

c - printf中&&和方括号的使用

转载 作者:行者123 更新时间:2023-12-03 15:41:50 25 4
gpt4 key购买 nike

我在 MCQ 测验中遇到了以下代码,

#include <stdio.h>
int main()
{
int j =2, k =4;
printf(&j["Programming"], &k["Theory"]);
k = j ^ 3;
if (k == j)
printf(&k["Practical"], "Trytosolve");
else
printf(&j["Problem creation"]);
return 0;
}
其中&符号用于开头本身和 printf 语句的引号 ("") 之外。我只知道 printf 语句及其格式说明符的传统用法。
我尝试运行此代码,但没有显示错误,但出现此警告: format not a string literal and no format arguments和以下输出 ogrammingoblem creation (这是多项选择中的选项之一)
我试图搜索这种用途,但找不到。有人能解释一下 & 和方括号的这种用法吗?

最佳答案

因为我讨厌以评论的形式给出答案,所以我将在这里更详细地拼写:
假设我们有一个数组 a和一个变量 i积分型,则 a[i]相当于 *(a + i) ,即我们可以得到 i a的第一个元素由衰变 a进入指向其第一个元素的指针,将该指针增加 i并取消引用结果。这是真的,因为数组在内存中占据连续的地址。
现在,事实证明,i[a]也相当于 a[i] ,这更像是一个没有人(据我所知)会在生产中使用的“技巧”。这是一种直观的理由,因为 a[i] == *(a + i) == *(i + a) == i[a] .
那么,&j["Programming"] == &(*(j + "Programming")) .因为取消引用一个指针然后获取它的地址是一个空操作,这是 j + "Programming" == "Programming" + j == "ogramming" ,因为字符串只是字符数组。
另一个分支也是如此,它的执行是因为 2 ^ 3 == 1 != 2 .

关于c - printf中&&和方括号的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64676525/

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