C言語なら俺に聞け 163 (987レス)
C言語なら俺に聞け 163 http://mevius.5ch.net/test/read.cgi/tech/1721137434/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
174: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f732-vU+L) [sage] 2024/09/15(日) 01:30:47.17 ID:B6k8li/O0 >>173 配列とその初期化子として現れる文字列リテラルが別の存在だってことが俺が何度も書いてることだよ。 これがそんなに何度も何度も何度も何度も書かないと理解できないようなことか? 別のポインタは配列を指せるが、その初期化子として現れる文字列リテラルを指せるわけじゃない。 char* foo = "hoge"; のようなケースではポインタ foo は文字列リテラルを指してるということと対比しての話だぞ。 http://mevius.5ch.net/test/read.cgi/tech/1721137434/174
176: デフォルトの名無しさん (ワッチョイ ffe1-1pYN) [sage] 2024/09/15(日) 01:38:12.52 ID:STy65/7c0 >>174 > 文字列リテラルを指せるわけじゃない。 はい、これが間違いの全て 文字列リテラルはコンパイラーだけが理解できる「構文」に過ぎない それを実行時にさせないとはこれいかに?w 文字列リテラルは「実行時」には何て名前になってんだ? 配列でもないぞ 配列に代入される前のrvalueの事だ まぁ文字列は例外的にlvalueにもなれるが、rvalueであることには違いない http://mevius.5ch.net/test/read.cgi/tech/1721137434/176
182: デフォルトの名無しさん (スッップ Sdbf-2MD7) [] 2024/09/15(日) 12:24:08.15 ID:WkBCL5VYd >>174 >char* foo = "hoge"; > >のようなケースではポインタ foo は文字列リテラルを指してる その表現が間違ってる。 fooは静的記憶域を指してるが正しい。 intptr_t *bar = 0xAABB; この場合数値リテラルを指すなんて言わんだろ。 http://mevius.5ch.net/test/read.cgi/tech/1721137434/182
261: デフォルトの名無しさん (ワッチョイ d6f5-K4S3) [sage] 2024/09/24(火) 19:39:49.05 ID:tv/lKhnI0 >>174 > char* foo = "hoge"; > > のようなケースではポインタ foo は文字列リテラルを指してる (単に端折っただけかもしれないけれど、)文字列リテラルに関してCには非常に込み入った事情(Rationale Rev. 5.10 6.4.5 冒頭-l.26, N1256 Annex J.5.5)があり、厳密に言えば foo は "hoge" によって初期化された無名の配列を指している(N1256 6.7.8-32)。 C99RationaleV5.10 https://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf テンプレ入りキボンヌ >>皆の衆 ともあれ、込み入った事情に該当しなければ const char afoo[] = "hoge"; あるいは const char * const ccfoo = "hoge"; 場合によって const char *cfoo = "hoge"; と書いて、うっかり書き換え防止に勇往邁進するのじゃ。 http://mevius.5ch.net/test/read.cgi/tech/1721137434/261
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
1.414s*