掲示板利用宣言

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

 私は

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

掲示板2

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

No.26815

ポインタの戻り値
投稿者---さとさと(2006/05/11 16:52:54)


C言語初心者です。今、下記のプログラムをネット上で見付けて少し変更しています。

後、下記のように少し変更したい点があります。

色々試しましたがどうしても解決できない為、お分かりの方宜しくお願い致します。



meibo型の構造体の配列として引数に渡す

struct meibo* disp(struct meibo data[])



構造体型のポインタを宣言

struct meibo *p



宣言したポインタで受け取りたい

p = disp(shain)



#include <stdio.h>
struct meibo{
    char   name[30];
    int    age;
};
struct meibo* disp(struct meibo data){  //
    if (data.name[0] == '\0' )
    {
            return 0;
    }
    else if(data.age >= 30)
    {
        printf("name : %s\n", data.name);
        printf("age  : %d\n", data.age);

        printf("\n");
    }
    return 0;
}
void main(){
        //
    struct meibo shain[] = {
        { "江藤健介", 30},
        { "加藤健二", 21},
        { "朝日真一",45 }
    };
    int i;
    for ( i = 0 ; i < 3 ; i++ )
        disp(shain[i]); //
}



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:ポインタの戻り値 26816 Yuki 2006/05/11 17:10:40
<子記事> Re:ポインタの戻り値 26819 shu 2006/05/11 19:59:35
<子記事> Re:ポインタの戻り値 26834 さとさと 2006/05/12 00:52:48


No.26816

Re:ポインタの戻り値
投稿者---Yuki(2006/05/11 17:10:40)


どこまでできて、どこができないのですか?

´↓は環境依存なのでネット上では使用しないほうが良いです。

ちなみに(2)(3)はそのままで良いと思うのですが?




この投稿にコメントする

削除パスワード

No.26818

Re:ポインタの戻り値
投稿者---さとさと(2006/05/11 17:42:14)


>どこまでできて、どこができないのですか?

すみません、下記のようにしているのですが、どうしても

return &data[];

&data[]のアドレスを何を返したらよいのかが分かりません。

その為、「式の構文エラーと'p'に代入した値は使われていません」となります。
申し訳ありませんが、宜しくお願いします。

#include <stdio.h>
struct meibo{
    char   name[30];
    int    age;
};
struct meibo* disp(struct meibo data[]){

    int i;
    if (data[i].name[0] == '\0' )
    {
            return 0;
    }
    else if(data[i].age >= 30)
    {
        printf("name : %s\n", data[i].name);
        printf("age  : %d\n", data[i].age);

        printf("\n");
    }
    return &data[];
}
void main(){

    struct meibo *p;
    struct meibo shain[] = {
        { "江藤健介", 30},
        { "加藤健二", 21},
        { "朝日真一",45 }
    };
    int i;
    for ( i = 0 ; i < 3 ; i++ )
        p = disp(shain);
}




この投稿にコメントする

削除パスワード

No.26819

Re:ポインタの戻り値
投稿者---shu(2006/05/11 19:59:35)


参考にでも

//
//  struct sample
//

//
#include <stdio.h>

//
struct shain
{
    char name[32];
    int age;
};

//
struct shain *disp( struct shain *p )
{
    return p;
}

//
int main( void )
{
    struct shain a = {"江藤健介", 30};
    struct shain *p;
    
    p = disp( &a );
    
    //
    printf( "%s: %d\n", a.name, a.age );
    printf( "%s: %d\n", p->name, p->age );
    
    //
    printf( "%s: %d\n", (&a)->name, (&a)->age );
    printf( "%s: %d\n", (*p).name, (*p).age );
    
    return 0;
}



この投稿にコメントする

削除パスワード

No.26820

Re:ポインタの戻り値
投稿者---さとさと(2006/05/11 20:38:12)


返答ありがとうございます。


実は、記述はしていなかったのですが、1件分のデータ表示
はできていたのですが、どうしてもifで判断して複数のデータを返すということができません。

お手数お掛けしますが、現在記述しているコードでの悪い点等をご指摘頂くと助かります。

大変申し訳ありませんが、宜しくお願いします。


この投稿にコメントする

削除パスワード

No.26821

Re:ポインタの戻り値
投稿者---kz3(2006/05/11 21:59:50)


>    for ( i = 0 ; i < 3 ; i++ )
>        p = disp(shain);
ここでループさせていますが、実質ループしてないも同然ですー。

あとdisp()関数のローカル変数に関して問題個所がありますが、
それは直されましたか?




この投稿にコメントする

削除パスワード

No.26822

Re:ポインタの戻り値
投稿者---さとさと(2006/05/11 22:02:31)


><pre><font color=brown>> for ( i = 0 ; i < 3 ; i++ )
> p = disp(shain);</font>
ここでループさせていますが、実質ループしてないも同然ですー。

あとdisp()関数のローカル変数に関して問題個所がありますが、
それは直されましたか?</pre>

すみません、どう直したら宜しいでしょうか?後どうしたら、
ループ処理が上手く表示されますか?




この投稿にコメントする

削除パスワード

No.26823

Re:ポインタの戻り値
投稿者---kz3(2006/05/11 22:10:22)


>すみません、どう直したら宜しいでしょうか?後どうしたら、
>ループ処理が上手く表示されますか?
配列要素へのポインタを順次disp()関数に渡せばOKです。

disp()では構造体メンバへと間接参照をすればOKだと思います。

構造体、構造体配列とポインタの間接参照については...ここでいいですか?=>構造体配列のポインタ表現







この投稿にコメントする

削除パスワード

No.26825

Re:ポインタの戻り値
投稿者---さとさと(2006/05/11 22:43:47)


>配列要素へのポインタを順次disp()関数に渡せばOKです。

順次渡すとは、具体的にコードで教えて頂くことはできますか?

>disp()では構造体メンバへと間接参照をすればOKだと思います。
間接参照って下記のようなことですか?
printf("name : %s\n", *data[i].name);
printf("age : %d\n", *data[i].age);
もしよければこちらもコード記述して頂くことはできますか?

何度も大変申し訳ありません。


この投稿にコメントする

削除パスワード

No.26827

Re:ポインタの戻り値
投稿者---shu(2006/05/11 23:14:49)


>順次渡すとは、具体的にコードで教えて頂くことはできますか?

駄目です。
その前に、問題点をもっと具体的に考える。

>もしよければこちらもコード記述して頂くことはできますか?

駄目です。
人の書いた意味の解からないコードは、役に立ちません。


この投稿にコメントする

削除パスワード

No.26826

Re:ポインタの戻り値
投稿者---shu(2006/05/11 23:12:13)


>返答ありがとうございます。

参考にならないのなら、お礼はいらないです。

>現在記述しているコードでの悪い点等をご指摘頂くと助かります。

現在のコードが、どれなのかわからないので指摘できませんが。
悪いコードは、どう直そうとしても悪いままなので、
どこで拾ってきたのか知りませんが、使わない。


この投稿にコメントする

削除パスワード

No.26834

Re:ポインタの戻り値
投稿者---さとさと(2006/05/12 00:52:48)


返答頂いた皆さんどうもありがとうございました。
皆さんのヒントで自分なりに考えて結果が出ました。
また何かありましたら宜しくお願いします。


この投稿にコメントする

削除パスワード

No.26836

Re:ポインタの戻り値
投稿者---kz3(2006/05/12 03:06:49)


>皆さんのヒントで自分なりに考えて結果が出ました。

結果、どのように直ったか教えてください。



この投稿にコメントする

削除パスワード

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