NOEMBLEM/エンブレムが設定されていません。

メールの詳細(トピック表示)

配列名に&を付けると

投稿者: さん  2007/04/20 23:14  MLNo.549   [メール表示]

山田と申します.

配列名に&を付けた場合についてお尋ねします.

gcc コンパイラでは,

char a[10];
char (*p)[10];
p = &a;

は -Wall オプションを付けても警告なしにコンパイルできます.
すなわち
&a
は,要素数10のchar型配列へのポインタ,という型になっ
ています.
(これは,
char b[3][10];
のように宣言したときの,例えば b[1] の型でもあります.)

配列名に&を付けたときの型はこのようになると,
Cの規格で規定されているのでしょうか.
(昔のCの本には,配列名に&を付けてはならない,
 と書いてあったような気がしますが.)
それとも, gcc で拡張されたことでしょうか.

知っておられましたら,
宜しくご教授いただければ,幸いです.


このエントリーをはてなブックマークに追加


  • MLNo.550   FUJIWARA Keiichiさん  (0) 2007/04/20 23:43  [メール表示する]
    藤原と申します。

    This message is reply to YAMADA Shuji - san
    written at Fri, 20 Apr 2007 23:14:51 +0900
    (Subject: was [beginers:0549] 配列名に&を付けると) ...

    >
    >配列名に&を付けた場合についてお尋ねします.
    >

    配列名に & をつけると、配列へのポインタになります。
    ですから、これは、gcc の独自拡張ではなく、ANSI C 以来の規定になり
    ます。

    一方で、多くの文脈で、配列名がポインタに読み替えられますが、これは、
    その要素へのポインタになります。
    この点で、
    char arr[10];
    に対して、
    arr (こちらは、ポインタに読み替えられたときには、 char *)
    &arr (こちらは、arr[10] へのポインタ)
    とは、異なる型になります。

    http://www.kouno.jp/home/c_faq/c6.html#12
    に詳しい説明があります。

    --
    今日は穀雨 (20:07)です。

    _/ -- Last 11421 hours until BEIJING 2008 Olympic Games ----------------
    _/ FUJIWARA Keiichi
    _/ E-Mail : keiichi@… <or> k1@…
    _/ URL : http://www.keiichi.fujiwara.name/
    ----------------------------------------------+----- Luna Phase 3.62 --
    PGP FingerPrint = 7CC3 4F95 8CC7 87D3 7178 C348 CD65 7F08 D68F 69F6
    S/MIME FingerPrint = 478F D8CB 6DE1 F223 85E4 B0A3 F636 00C3 3767 D955

  • MLNo.551   TDaさん  (0) 2007/04/21 03:27  [メール表示する]
    式中で単に配列名を表記すると3つのの例外をのぞき
    「配列のセイント右要素へのポインタ」
    に読み替えられます。

    3つの例外とは以下の通りです。
    char a[10];
    という宣言があったとして

    1)&演算子の被演算子に適用になった場合
     この場合は配列全体を表します。結果的に&aは配列全体を指すポインタとなり
    ます。
    2)sizeof演算子の被演算子になった場
     この場合も配列全体を表します。結果的にsizeof(a)は配列全体のサイズとな
    ります。
    3)配列変数の初期化式中
    char a[] = "hello, world\n"
    文字列リテラルはconst charの配列でり通常は式中に文字式が現れるのは初期化
    単位。

    以上はAnSICの内容であるはずです。


    YAMADA Shuji wrote:
    > 山田と申します.
    >
    > 配列名に&を付けた場合についてお尋ねします.
    >
    > gcc コンパイラでは,
    >
    > char a[10];
    > char (*p)[10];
    > p = &a;
    >
    > は -Wall オプションを付けても警告なしにコンパイルできます.
    > すなわち
    > &a
    > は,要素数10のchar型配列へのポインタ,という型になっています.
    > (これは,
    > char b[3][10];
    > のように宣言したときの,例えば b[1] の型でもあります.)
    >
    > 配列名に&を付けたときの型はこのようになると,
    > Cの規格で規定されているのでしょうか.
    > (昔のCの本には,配列名に&を付けてはならない,
    >  と書いてあったような気がしますが.)
    > それとも, gcc で拡張されたことでしょうか.
    >
    > 知っておられましたら,
    > 宜しくご教授いただければ,幸いです.
    >
    >
    >
    >
    > --[PR]------------------------------------------------------------------
    >  ☆━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━☆  現金10万円!
    >  ┃冬┃の┃B┃I┃G┃キ┃ャ┃ン┃ペ┃ー┃ン┃★―★―★―★―★
    >  ☆━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━☆  豪華賞品満載!
    >        合計204名様にプレゼント!!!
    > http://popot.jp/lbu/member/RegistForm1View.do?ref=6000106------------------------------------------------------------------[PR]--
    >
    > ■GMO INTERNET GROUP■ GMO INTERNET www.gmo.jp
    >
    >
    >
    >
    >
    >


    --
    /_/_/_/_/_/_/_/_/_/_/_/_/_/
    TDa
    mailto:tda@…
    /_/_/_/_/_/_/_/_/_/_/_/_/_/


  • MLNo.552   さん  (0) 2007/04/21 07:27  [メール表示する]
    藤原様,TDa様

    早速のご教授ありがとうございました.
    ANSI規格だったのですね.

    その他,いろいろと勉強になりました.
    感謝いたします.

    山田


    On 2007/04/21, at 3:27, TDa wrote:

    > 式中で単に配列名を表記すると3つのの例外をのぞき
    > 「配列のセイント右要素へのポインタ」
    > に読み替えられます。
    >
    > 3つの例外とは以下の通りです。
    > char a[10];
    > という宣言があったとして
    >
    > 1)&演算子の被演算子に適用になった場合
    >  この場合は配列全体を表します。結果的に&aは配列全体を指
    > すポインタとなり
    > ます。
    > 2)sizeof演算子の被演算子になった場
    >  この場合も配列全体を表します。結果的にsizeof(a)は配列
    > 全体のサイズとな
    > ります。
    > 3)配列変数の初期化式中
    > char a[] = "hello, world\n"
    > 文字列リテラルはconst charの配列でり通常は式中に文字式が
    > 現れるのは初期化
    > 単位。
    >
    > 以上はAnSICの内容であるはずです。
    >
    >
    > YAMADA Shuji wrote:
    >> 山田と申します.
    >>
    >> 配列名に&を付けた場合についてお尋ねします.
    >>
    >> gcc コンパイラでは,
    >>
    >> char a[10];
    >> char (*p)[10];
    >> p = &a;
    >>
    >> は -Wall オプションを付けても警告なしにコンパイルできま
    >> す.
    >> すなわち
    >> &a
    >> は,要素数10のchar型配列へのポインタ,という型に
    >> なっています.
    >> (これは,
    >> char b[3][10];
    >> のように宣言したときの,例えば b[1] の型でもあります.)
    >>
    >> 配列名に&を付けたときの型はこのようになると,
    >> Cの規格で規定されているのでしょうか.
    >> (昔のCの本には,配列名に&を付けてはならない,
    >>  と書いてあったような気がしますが.)
    >> それとも, gcc で拡張されたことでしょうか.
    >>
    >> 知っておられましたら,
    >> 宜しくご教授いただければ,幸いです.
    >>
    >>
    >>
    >>
    >> --
    >> [PR]-----------------------------------------------------------------
    >> -
    >>  ☆━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━☆  現金
    >> 10万円!
    >>  ┃冬┃の┃B┃I┃G┃キ┃ャ┃ン┃ペ┃ー┃ン┃★―★―★―
    >> ★―★
    >>  ☆━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━☆  豪華
    >> 賞品満載!
    >>        合計204名様にプレゼント!!!
    >> http://popot.jp/lbu/member/RegistForm1View.do?
    >> ref=6000106----------------------------------------------------------
    >> --------[PR]--
    >>
    >> ■GMO INTERNET GROUP■ GMO INTERNET www.gmo.jp
    >>
    >>
    >>
    >>
    >>
    >>
    >
    >
    > --
    > /_/_/_/_/_/_/_/_/_/_/_/_/_/
    > TDa
    > mailto:tda@…
    > /_/_/_/_/_/_/_/_/_/_/_/_/_/
    >
    >
    >
    > --
    > [PR]------------------------------------------------------------------
    >  ☆━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━☆  現金
    > 10万円!
    >  ┃冬┃の┃B┃I┃G┃キ┃ャ┃ン┃ペ┃ー┃ン┃★―★―★―★
    > ―★
    >  ☆━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━☆  豪華
    > 賞品満載!
    >        合計204名様にプレゼント!!!
    > http://popot.jp/lbu/member/RegistForm1View.do?ref=6000106
    > ------------------------------------------------------------------
    > [PR]--
    > ■GMO INTERNET GROUP■ GMO INTERNET www.gmo.jp
    >
    >


  • MLNo.555   ISLeさん  (0) 2007/04/21 16:37  [メール表示する]
     ISLeです。

     既に解決されたようですが、資料として紹介しておきます。

     &演算子をともなわない配列名については、

      JIS X 3010:2003 6.3.2.1 左辺値,配列及び関数指示子

    の記述が、&演算子をともなう配列名については、

      JIS X 3010:2003 6.5.3.2 アドレス及び間接演算子

    の記述が根拠になります。
     上記はC99の規格ですが、C89でも番号が違うだけで同様の記述が
    ありました。

     日本工業標準調査会のサイト( http://www.jisc.go.jp/ )のJIS
    検索で規格書を読むことができます。
    #イメージ取り込みのPDFでテキスト検索できなくて使い勝手最悪ですけど。

    --
    Isao SHIMAKURA (ISLe)

    ----- Original Message -----
    送信者 : "YAMADA Shuji" <yamada@…>
    宛先 : <beginers@…>
    送信日時 : 2007年4月20日 23:14
    件名 : [beginers:0549] 配列名に&を付けると



メールへの返信はMLのメンバーしかできません。

更新順メールリスト