[英]Can't add to a string literal in C to shift its index
我當時正在用代碼編寫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 == p.
語法糖&*p == p.
那么,為什么&p[n] != p+n
呢?
編輯:原來我只是在我的Fizz\\0FizzBuzz"+i%15
: Fizz\\0FizzBuzz"+i%15
中捕獲了?:
該死的運算符優先級。我是個白痴。:)
您的代碼的問題是您缺少括號。 這工作得很好:
puts("Fizz\0FizzBuzz"+(i%15?i%3?9:0:5));
在您的原始代碼中,第一個條件是?
:
運算子為
"Fizz\0FizzBuzz"+i%15
這不是你想要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.