文字列代入?
文字の代入 - Programming22
おとなり日記で見つけたのでコメントする。
char str1[5]; char str2[] = "tekitou"; char *str3 = "tekitou2"; str1 = str2; /*error*/ str1 = str3; /*error*/ str3 = str2; /*OK*/
静的配列で確保したstr1は str1 = str2; /*アドレス = アドレス*/ str1 = str3; /*アドレスにアドレスは代入できない*/ と書いたとき&str1[0]となり配列の先頭アドレスを指すため代入できない
- str1が静的かどうかは無関係。
- 説明部分の文章は、意味をなさない。配列名を評価すると「代入できない左辺値」となるため、代入できない。
- さしあたりポインタはポインタであり、アドレスとは別の概念ということを復習の必要あり
str3 = str2; は左辺がポインタなのでアドレスを代入することができる. アドレスの代入であって文字列tekitou2はコピーされていない.
- 左辺、右辺とも型が同じであり、str3は代入可能な左辺値であるため、問題なく代入できる。
- 代入は浅いコピーであるので、実体はコピーされない。
・メモ・ ""は囲んだ文字列をメモリ上に確保したあと,確保したメモリの先頭アドレスを返す.
この文章はどこから持ってきたかわからないが、全く誤り。