配列の代入について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Cst

配列の代入について

#1

投稿記事 by Cst » 8年前

配列についての質問です

char str[10];
str[0] == ′a′;

上のように0番目の値だけ代入した場合、1番目以降の要素はどうなっているのでしょうか?
自分の予想ではNULLが入っていると思うのですが確認の仕方がわかりません。1番目以降どうなっているのか教えてください。

アバター
へろりくしょん
記事: 92
登録日時: 13年前
住所: 福岡

Re: 配列の代入について

#2

投稿記事 by へろりくしょん » 8年前

言語が分かりませんが、C言語なら 0x00 が入っています。

規格で定められているので、規格書で確認できますよ。

マミタス

Re: 配列の代入について

#3

投稿記事 by マミタス » 8年前

¥0で埋め尽くされるよ
int型は0で表すけど、charは0を表すとき「¥」を付けないといけない

YuO
記事: 947
登録日時: 13年前
住所: 東京都世田谷区

Re: 配列の代入について

#4

投稿記事 by YuO » 8年前

前提条件として,言語をCとします。
Cst さんが書きました:char str[10];
str[0] == ′a′;
上のように0番目の値だけ代入した場合、1番目以降の要素はどうなっているのでしょうか?
  • strが自動記憶域期間を持つならば不定
  • 静的記憶域期間またはスレッド記憶域期間を持ち,他に明示的な初期化が行われていないならば0 (正負の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;

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 配列の代入について

#5

投稿記事 by みけCAT » 8年前

Cst さんが書きました:char str[10];
str[0] == ′a′;

上のように0番目の値だけ代入した場合、1番目以降の要素はどうなっているのでしょうか?
C言語やC++では==演算子で代入することはできないので、質問が矛盾しています。
矛盾からはなんでも導けます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

かずま

Re: 配列の代入について

#6

投稿記事 by かずま » 8年前

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;
}
実行結果

コード:

 97 85 51 1 -37 52 51 1 8 -1
 103 0 0 0 0 0 0 0 0 0
 115 0 0 0 0 0 0 0 0 0

閉鎖

“C言語何でも質問掲示板” へ戻る