【发布时间】:2025-12-19 20:20:15
【问题描述】:
我正在用 C 语言编写著名的“fizzbuzz”筛选问题(这个问题的重点是了解 C 运算符的工作原理,而不是编写代码;不要让我偏离主题^^“),然后我想出了用这一行:
puts(&"Fizz\0FizzBuzz"[i%15?i%3?9:0:5]));
这对我来说似乎有点不必要,因为我认为我可以这样做:
puts("Fizz\0FizzBuzz"+i%15?i%3?9:0:5));
但是第一个可能是Fizz 的段错误。我的问题是:为什么我不能通过简单地添加来索引字符串文字?我尝试将加数转换为size_t,但这没有任何用处。鉴于对于任意的char *p(或任何类型的指针),p[n] 只是(*p+n) 的语法糖,(我认为)&*p == p.
那么,为什么是&p[n] != p+n?
编辑:原来我只是在我的?: 中捕获Fizz\0FizzBuzz"+i%15。该死的运算符优先级。我是个白痴。 :)
【问题讨论】:
-
?: 运算符的优先级是什么? (有关提示,请参阅 here。)
-
哦,天哪,我搞砸了条件运算符优先级......我觉得很愚蠢。我现在要删除这个问题吗?
-
由你决定。如果你不这样做,有人可能会笑出声来。
-
很公平。不妨编辑我的 OP 以反映我的顿悟。
标签: c string indexing constants