C言語なら俺に聞け 163 (985レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
70: はちみつ餃子◆8X2XSCHEME (ワッチョイ 7932-IU9Y) [sage] 2024/09/09(月) 17:19:13.64 ID:XH4OT6yj0(1/2) AAS
>>6868(4): デフォルトの名無しさん (ワッチョイ fa2d-2PHd) [] 2024/09/09(月) 17:06:32.51 ID:ft14UVke0(1) AAS
lvalueに関してエラーが出るんだけど、どうしてこれがだめなのかわからないです
#include <stdio.h>
int main()
{
char s[] = "hoge";
char t[100];
while (*t++ = *s++)
;
printf("%s", t);
}
s の型は char[5] 、 t の型は char[100] だというのはわかる?
だけど式に出てくる配列は原則として配列の先頭要素を指すポインタ (この場合に型でいえば char*) に型変換される。
変換後に出てくるポインタは rvalue なのでインクリメントの対象に出来ない。
rvalue ってのは式の評価をする間に一時的に生まれて評価が終わったら消えるものなので
仮にインクリメント出来たとしても何にも使えない。
配列が勝手にポインタに変換されるっていうのが変則的で分かり難いポイントだけど
これは C を使ってたら避けようがない。
75: はちみつ餃子◆8X2XSCHEME (ワッチョイ 7932-IU9Y) [sage] 2024/09/09(月) 18:57:03.60 ID:XH4OT6yj0(2/2) AAS
>>71規格には「型変換する」と明瞭に書いてあって変換しないと解釈できる余地はない。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 1.399s*