无法添加到 C 中的字符串文字以移动其索引

Can't add to a string literal in C to shift its index

我正在用 C 编写著名的 "fizzbuzz" 筛选问题(这个问题的重点是了解 C 运算符的工作方式,而不是编写代码;不要让我跑题 ^^"),我想到了这一行:

puts(&"Fizz[=10=]FizzBuzz"[i%15?i%3?9:0:5]));

这对我来说似乎有点不必要,因为我认为我可以这样做:

puts("Fizz[=11=]FizzBuzz"+i%15?i%3?9:0:5));

但是第一个可能出现的段错误 Fizz。我的问题是:为什么我不能通过简单地添加到字符串文字来索引它?我试过将加数转换为 size_t,但这没有任何用处。鉴于对于任意 char *p(或与此相关的任何类型的指针),p[n] 只是 (*p+n) 的语法糖,并且(我认为)&*p == p.

那么,为什么是&p[n] != p+n

编辑: 结果我只是在我的 ?: 中捕获了 Fizz[=19=]FizzBuzz"+i%15。该死的运算符优先级。我是个白痴。 :)

您的代码存在的问题是缺少括号。这工作得很好:

puts("Fizz[=10=]FizzBuzz"+(i%15?i%3?9:0:5));

在您的原始代码中,第一个 ? : 运算符的条件是

"Fizz[=11=]FizzBuzz"+i%15

这不是你想要的。

Demo.