簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM