掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

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

掲示板2

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

No.28306

e
投稿者---ハリー(2006/10/04 13:21:15)








void student_print(student *data); 引数部分で、

student *data、をstudent型へのポインタの理解でOKですか?、


ためしに、student型をint型に代えても

void student_print(int *data); 実行結果は同じでした。


特にstudent型で宣言する必要はないんですか?

教えてください。


#include <stdio.h>

typedef struct {

    int year;   /* 学年 */
    int class;  /* クラス */
    int number; /* 出席番号 */
    char name[64];  /* 名前 */
    
} student;

void student_print(student *data);

int main(void)
{
    student data;
    
    data.year = 3;
    data.class = 4;
    data.number = 18;
    strcpy(data.name,"MARIO");
    
    student_print(&data);   /* アドレスで呼び出す */
    
    return 0;
}

void student_print(student *data)
{
    printf("[学年]:%d\n",data->year); /* ->記号でアクセス */
    printf("[クラス]:%d\n",data->class);
    printf("[出席番号]:%d\n",data->number);
    printf("[名前]:%s\n",data->name);
    return;
}




この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:e 28307 123456789 2006/10/04 14:22:53
<子記事> Re:e 28308 nano 2006/10/04 14:37:42
<子記事> Re:e 28313 ありえないざ 2006/10/04 15:53:04


No.28307

Re:e
投稿者---123456789(2006/10/04 14:22:53)


まず掲示板利用宣言、特に
>>題名と投稿者名は具体的に書きます。
を10辺くらい読んでください。
題名がいい加減すぎです。

日本語も多少不自由な気がします。
投稿する前に読み直しましょう。


本題ですが、一体どんな独自規格のコンパイラを使っているのでしょうか?
書かれていないので分かりませんが、ANSI準拠ではない様な気がします。
ソースをコピペして実行してみましたが、当然student_printに構造体を渡している時点で警告が出ます。
これを無視しても、int型は構造体ではないので、->が使えませんのでエラーになります。
結果、コンパイルすらできません。
これが実行できる環境を教えてもらいたいですね。


この投稿にコメントする

削除パスワード

No.28308

Re:e
投稿者---nano(2006/10/04 14:37:42)


>void student_print(int *data); 実行結果は同じでした。

[推測]
ソースを修正した後、「コンパイルせずに」実行した。

[確認方法]
ビルドし直して、結果を見る。


この投稿にコメントする

削除パスワード

No.28324

Re:e
投稿者---ハリー(2006/10/04 16:47:24)


すみませんでした。
あわててたもので、テストしているとき題名を確認せず、投稿してしまいました。
前のプログラムはあるサイトのコピペで、たぶん全角文字でかかれてます。

要素名が長かったので、ちょっと手をくわえたら、
いろいろバグの在る物になってしまいました。


エディターが調子悪いのかもしれません。

はじめに、student *dataでコンパイルできて、

その次にint *dataと書き直すとコンパイルできました。

一度エディターを閉じ改めて、そのコピペでコンパイルすると、

以下のメッセージがでました。

ご指摘のとおりでした。

ありがとうございました。

エラー E2034 k.cpp 21: 'student *' 型は 'int *' 型に変換できない(関数 main() )
エラー E2342 k.cpp 21: パラメータ 'data' は int * 型として定義されているので student * は渡せない(関数 main() )
エラー E2288 k.cpp 27: -> か ->* の左には構造体のポインタが必要(関数 student_print(int *) )
エラー E2288 k.cpp 28: -> か ->* の左には構造体のポインタが必要(関数 student_print(int *) )
エラー E2288 k.cpp 29: -> か ->* の左には構造体のポインタが必要(関数 student_print(int *) )
エラー E2288 k.cpp 30: -> か ->* の左には構造体のポインタが必要(関数 student_print(int *) )
エラー E2467 k.cpp 31: 'student_print(int *)' は値を返せない(関数 student_print(int *) )
警告 W8057 k.cpp 32: パラメータ 'data' は一度も使用されない(関数 student_print(int *) )
*** 7 errors in Compile ***




この投稿にコメントする

削除パスワード

No.28313

Re:e
投稿者---ありえないざ(2006/10/04 15:53:04)


プロトタイプ宣言の
void student_print(student *data);

void student_print(int *data);
に変えただけですと、警告はでますがエラーにはなりません。

>student *data、をstudent型へのポインタの理解でOKですか?、
OKだと思うけど

>特にstudent型で宣言する必要はないんですか?
わざと違う型で宣言して下記警告を出す必要は無いと思う。(VC6)

hoge.c(23) : warning C4133: 'function' : 'struct student *' と 'int *' の間で型に
互換性がありません。
hoge.c(29) : warning C4028: 1 番目の引数の型が関数宣言と一致しません。


この投稿にコメントする

削除パスワード

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