【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※返信付き投稿の削除は禁止!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら


本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.21870

入れ子の構造体について
投稿者---selvid(2005/07/12 16:57:02)


こんにちは。以下のソースでアロー演算子だけで、例えば定価を出力させ
る方法は以下の様な形しか無理なのでしょうか?(警告が1つ出ましたが)

「sp1->kakaku->teika = 9000;」のようなアロー演算子を2つ入れた
書き方は出来ない?みたいですが、一応、記述→コンパイルしてみると
エラー・警告ともに0でしたが、実行させると問題発生のメッセージが
出ました。環境はWindowsXP、VC++6.0です。よろしくお願い致します。

#include <stdio.h>

struct kakakutyp {
    int teika;    // 定価
    int waribiki;   // 割引価格
    int yuutai;  // 優待価格
};

typedef struct syohin {
    char name[30];    // 商品名
    struct kakakutyp *kakaku;      // 構造体を指すポインタで指定
    int zaiko;        // 在庫数
} Syohin;

int main(void)
{
    Syohin syo1;
    Syohin *sp1 = &syo1;

    // ↓warning C4047: 'initializing' : 間接参照のレベルが 'struct kakakutyp *' と 'struct kakakutyp ** ' で異なっています。
    struct kakakutyp *sp2 = &sp1->kakaku;

    sp2->teika = 9000;

    printf("定価:%d\n", sp2->teika);

    // ↓問題発生のメッセージボックスが出る
    //sp1->kakaku->teika = 9000 ;
    //printf("定価:%d\n", sp1->kakaku->teika);

    return 0;
}



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:入れ子の構造体について 21871 nop 2005/07/12 17:17:07


No.21871

Re:入れ子の構造体について
投稿者---nop(2005/07/12 17:17:07)


>こんにちは。以下のソースでアロー演算子だけで、例えば定価を出力させ
>る方法は以下の様な形しか無理なのでしょうか?(警告が1つ出ましたが)
>「sp1->kakaku->teika = 9000;」のようなアロー演算子を2つ入れた
>書き方は出来ない?みたいですが、一応、記述→コンパイルしてみると
>エラー・警告ともに0でしたが、実行させると問題発生のメッセージが
>出ました。環境はWindowsXP、VC++6.0です。よろしくお願い致します。

「sp1->kakaku」が指すオブジェクトがない。

> Syohin syo1;
> struct kakakutyp kakaku;
>
> syo1->kakaku = &kakaku;
> sp1->kakaku->teika = 9000 ;
> printf("定価:%d\n", sp1->kakaku->teika);

などとすべき。


この投稿にコメントする

削除パスワード

No.21873

Re:入れ子の構造体について
投稿者---selvid(2005/07/12 17:52:07)


nop様、レスありがとうございます。
以下のように書けば良いわけですね。

#include <stdio.h >

struct kakakutyp {
    int teika;    // 定価
    int waribiki;   // 割引価格
    int yuutai;  // 優待価格
};

typedef struct syohin {
    char name[30];    // 商品名
    struct kakakutyp *kakaku;   // 構造体を指すポインタで指定
    int zaiko;        // 在庫数
} Syohin;

int main(void)
{
    Syohin syo1;
    Syohin *sp1 = &syo1;
    struct kakakutyp kakaku;
 
    sp1->kakaku = &kakaku;
    sp1->kakaku->teika = 9000;
    printf("定価:%d\n", sp1->kakaku->teika);

    return 0;
}



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧