C言語におけるメモリの様子や型とは何なのかがいまいちイメージできません。
調べるほどに混乱してきています。明解ない説明をよろしくお願いします。
特に下に書く3点が気になりますので、そちらの方も併せてご指導願いします。
「char型の配列をメモリ上に10バイト用意し、文字列abcを格納する」 → char s [ 10 ] = "abc";
この時、"abc"の先頭アドレスがs [ 0 ]に格納されているという解釈であっているのでしょうか?
またメモリ上には、 s[0]には 'a' が、s[1]には 'b'が、 s[2]には'c'が、s[3]には '\0'が入っていると思うのですが、
それ以降(s[4]~s[10])には何が入っているのでしょうか? ' \0 ' なのか、それとも空なのか気になります。
あと、書籍には' a ' はchar型だとありましたが、C言語はデータを数値で扱うとも書いてありました。
この場合の数値とは文字コードという意味なのでしょうか?
どうか宜しくお願い致します。
c言語の配列について
Re: c言語の配列について
s[ 0 ]には 'a' が格納されています。telepas さんが書きました: 「char型の配列をメモリ上に10バイト用意し、文字列abcを格納する」 → char s [ 10 ] = "abc";
この時、"abc"の先頭アドレスがs [ 0 ]に格納されているという解釈であっているのでしょうか?
そもそも「空」という状態は存在しませんので、必ず何らかの値が入っています。telepas さんが書きました: またメモリ上には、 s[0]には 'a' が、s[1]には 'b'が、 s[2]には'c'が、s[3]には '\0'が入っていると思うのですが、
それ以降(s[4]~s[10])には何が入っているのでしょうか? ' \0 ' なのか、それとも空なのか気になります。
s[4]~s[10]になにが入っているかは実際にアクセスしないと分かりません。
静的記憶領域に存在する変数の場合は' \0 'が入っていますが、そうでない場合はなにが入っているかは不定です。
記憶領域に関係なく' \0 'で初期化されます。失礼しました。
§ 8.5.2
If there are fewer initializers than there are array elements, each element not explicitly initialized shall be
zero-initialized (8.5).
そうです。telepas さんが書きました: あと、書籍には' a ' はchar型だとありましたが、C言語はデータを数値で扱うとも書いてありました。
この場合の数値とは文字コードという意味なのでしょうか?
Re: c言語の配列について
ちょっと違います。telepas さんが書きました: 「char型の配列をメモリ上に10バイト用意し、文字列abcを格納する」 → char s [ 10 ] = "abc";
この時、"abc"の先頭アドレスがs [ 0 ]に格納されているという解釈であっているのでしょうか?
char配列の初期化はcharのポインタとは事情が少し異なっています。 は実際のところは と解釈されています。
なので とかは文法エラーになります。
文字列定数の先頭アドレスを格納しているわけではないからです。
4から10まではすべて\0が入ります。(コンパイラ依存かもしれないです)telepas さんが書きました: またメモリ上には、 s[0]には 'a' が、s[1]には 'b'が、 s[2]には'c'が、s[3]には '\0'が入っていると思うのですが、
それ以降(s[4]~s[10])には何が入っているのでしょうか? ' \0 ' なのか、それとも空なのか気になります。
char配列の初期化時はかならず文字列+1つのサイズがないといけません。
なので これは4番目に0が入れられないのでエラーになります。
その認識で大丈夫だと思います。telepas さんが書きました: あと、書籍には' a ' はchar型だとありましたが、C言語はデータを数値で扱うとも書いてありました。
この場合の数値とは文字コードという意味なのでしょうか?
'a'や'b'や'c'は実際には整数のデータです。
ヽ(*゚д゚)ノ カイバー