C 文字列 新しいページはコチラ
提供: yonewiki
(→文字列) |
(→文字列) |
||
97行: | 97行: | ||
<br /> | <br /> | ||
そういった不便さも踏み込んでいけば一定の理解を得ることができると思います。<br /> | そういった不便さも踏み込んでいけば一定の理解を得ることができると思います。<br /> | ||
+ | <br /> | ||
+ | 配列の性質から、文字列を出力する際は以下のように指定します。<br /> | ||
+ | <syntaxhighlight lang="cpp"> | ||
+ | char cStr1[] = "yonewiki"; | ||
+ | std::cout << "cStr1 =" << cStr1 << "\n"; | ||
+ | std::cout << "&cStr1 =" << &cStr1 << "\n"; | ||
+ | std::cout << "&cStr1[0] =" << &cStr1[0] << "\n"; | ||
+ | </syntaxhighlight> | ||
+ | <br /> | ||
+ | cStr[]で定義された配列変数は初期化の再に配列の大きさが9になり、配列の番号0~8までを保持した状態になります。<br /> | ||
+ | そして、配列要素を取り除いた記述で cStr1 すると先頭のアドレスを返します。<br /> | ||
+ | したがって、アドレス演算子を使って、&cStr1[0] や[0]を省略して&cStrと指定したのと同じことになります。<br /> | ||
+ | つまり、cStr1と&cStr1と&cStr1[0]は同じアドレスを保持しています。<br /> | ||
+ | ただし、std::coutで出力処理をするときには、扱いが異なります。 | ||
+ | <syntaxhighlight lang="cpp"> | ||
+ | cStr1 =yonewiki | ||
+ | &cStr1 =003AF914 | ||
+ | &cStr1[0] =yonewiki | ||
+ | </syntaxhighlight> | ||
+ | となります。ありゃ、2つめの結果&cStr1がアドレスになるのは意外(汗。<br /> | ||
+ | ちなみに、うけとったアドレスから\0が現れるまで出力してくれるprintf関数の書式指定演算子%sを使った場合は<br /> | ||
+ | プログラミング部分 | ||
+ | <syntaxhighlight lang="cpp"> | ||
+ | printf("cStr1 = %s\n" , cStr1); | ||
+ | printf("&cStr1 = %s\n" , &cStr1); | ||
+ | printf("&cStr1[0] = %s\n" , &cStr1[0]); | ||
+ | </syntaxhighlight> | ||
+ | 出力結果 | ||
+ | <syntaxhighlight lang="cpp"> | ||
+ | cStr1 =yonewiki | ||
+ | &cStr1 =yonewiki | ||
+ | &cStr1[0] =yonewiki | ||
+ | </syntaxhighlight> | ||
+ | となります。std::cout << &cStr1でアドレスが表示されるっていうのは、実際に確かめて、初めて知った。普段、こういうことしないからね。<br /> | ||
+ | で、どういうことなんだろうって調べてみた。それには数値データの配列の場合はどうなるん?って疑問から解消できないか試みてみる。<br /> | ||
<br /> | <br /> | ||
次はポインタを使った文字列操作についての記事を書こうと思います。なかなかやるきになんないすけどね。<br /> | 次はポインタを使った文字列操作についての記事を書こうと思います。なかなかやるきになんないすけどね。<br /> |