配列についての質問です
char str[10];
str[0] == ′a′;
上のように0番目の値だけ代入した場合、1番目以降の要素はどうなっているのでしょうか?
自分の予想ではNULLが入っていると思うのですが確認の仕方がわかりません。1番目以降どうなっているのか教えてください。
配列の代入について
Re: 配列の代入について
言語が分かりませんが、C言語なら 0x00 が入っています。
規格で定められているので、規格書で確認できますよ。
規格で定められているので、規格書で確認できますよ。
Re: 配列の代入について
前提条件として,言語をCとします。
Cst さんが書きました:char str[10];
str[0] == ′a′;
上のように0番目の値だけ代入した場合、1番目以降の要素はどうなっているのでしょうか?
- strが自動記憶域期間を持つならば不定
- 静的記憶域期間またはスレッド記憶域期間を持ち,他に明示的な初期化が行われていないならば0 (正負の0があるなら正の0)
INCITS/ISO/IEC 9899:2011 さんが書きました:6.7.9 Initialization
10 If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate. If an object that has static or thread storage duration is not initialized explicitly, then:
- if it has pointer type, it is initialized to a null pointer;
- if it has arithmetic type, it is initialized to (positive or unsigned) zero;
- if it is an aggregate, every member is initialized (recursively) according to these rules, and any padding is initialized to zero bits;
- if it is a union, the first named member is initialized (recursively) according to these rules, and any padding is initialized to zero bits;
Re: 配列の代入について
C言語やC++では==演算子で代入することはできないので、質問が矛盾しています。Cst さんが書きました:char str[10];
str[0] == ′a′;
上のように0番目の値だけ代入した場合、1番目以降の要素はどうなっているのでしょうか?
矛盾からはなんでも導けます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 配列の代入について
質問者は、回答者の皆さんへ返事を書いてください。Cst さんが書きました: char str[10];
str[0] == ′a′;
上のように0番目の値だけ代入した場合、1番目以降の要素はどうなっているのでしょうか?
自分の予想ではNULLが入っていると思うのですが確認の仕方がわかりません。1番目以降どうなっているのか教えてください。
そして、理解できたら解決に。
理解できなければ質問してください。
#include <stdio.h>
char g_str[10]; // 静的記憶域 (グローバル)
int main(void)
{
static char s_str[10]; // 静的記憶域 (ローカル)
char str[10]; // 自動記憶域 (ローカル)
int i;
str[0] = 'a'; // str[0] == 'a'; は代入ではなく、等値比較
for (i = 0; i < 10; i++) printf(" %d", str[i]);
printf("\n");
g_str[0] = 'g';
for (i = 0; i < 10; i++) printf(" %d", g_str[i]);
printf("\n");
s_str[0] = 's';
for (i = 0; i < 10; i++) printf(" %d", s_str[i]);
printf("\n");
return 0;
}