掲示板利用宣言

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

 私は

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

掲示板2

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

No.29658

関数(データの引渡し)
投稿者---kasai(2007/01/31 08:50:53)


void smp(int**)

int main()
{
int a=10;
int b=20;
int c=30;
int *hairetu[] = {&a, &b, &c};

smp(hairetu);

return 0;
}

void smp( int **hairetu)
{
int i;
hairetu++ ;
for(i=1;i<3;i++,hairetu++){
**hairetu *= 10;
**hairetu += **(hairetu-1);
}
}


のプログラムで、a=10,b=210,c=510となるのですが、なぜこうなるのか、わかるかた教えてください。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:関数(データの引渡し) 29661 asd 2007/01/31 09:46:56
<子記事> Re:関数(データの引渡し) 29675 ルナレルナ 2007/01/31 23:24:56


No.29661

Re:関数(データの引渡し)
投稿者---asd(2007/01/31 09:46:56)


>課題の丸投げはしません。

あなたはどうなると考えられたのでしょうか?
考えても全くわからなかったのでしょうか?

ステップ実行やprintf文などを使って逐次値の変化を見れば自ずと分かると思うのですが。
その上で「〜がこうなる理由が分かりません」ということであれば再度質問するといいかと思います。

>void smp(int**)
>
>int main()
>{
> int a=10;
> int b=20;
> int c=30;
> int *hairetu[] = {&a, &b, &c};
>
> smp(hairetu);
>
> return 0;
>}
>
>void smp( int **hairetu)
>{
> int i;
> hairetu++ ;
> for(i=1;i<3;i++,hairetu++){
> **hairetu *= 10;
> **hairetu += **(hairetu-1);
> }
>}
>
>
>のプログラムで、a=10,b=210,c=510となるのですが、なぜこうなるのか、わかるかた教えてください。


この投稿にコメントする

削除パスワード

No.29675

Re:関数(データの引渡し)
投稿者---ルナレルナ(2007/01/31 23:24:56)
http://park6.wakwak.com/~nougaki/mini_program/


/*
    ポインタの不理解
    ポインタのポインタの不理解
    ポインタの配列の不理解
    そんな中での関数化
    関数の引数のやりとり
    関数の引数のやりとり(ポインタ)
    いろいろと不理解なままでの計算
    目的の見えないサンプルプログラム
*/

int main(void)
{
    int a = 10;
    int b = 20;
    int c = 30;
    int *hairetu[] = {&a, &b, &c};
    
    printf("a = %d, &a = %p\n", a, &a);
    printf("b = %d, &a = %p\n", b, &b);
    printf("c = %d, &a = %p\n", c, &c);
    putchar('\n');
    
    printf("hairetu + 0 = %p\n", hairetu + 0);
    printf("hairetu + 1 = %p\n", hairetu + 1);
    printf("hairetu + 2 = %p\n", hairetu + 2);
    putchar('\n');
    
    printf("**(hairetu + 0) = %d, *(hairetu + 0) = %p\n", **(hairetu + 0), *(hairetu + 0));
    printf("**(hairetu + 1) = %d, *(hairetu + 1) = %p\n", **(hairetu + 1), *(hairetu + 1));
    printf("**(hairetu + 2) = %d, *(hairetu + 2) = %p\n", **(hairetu + 2), *(hairetu + 2));
    putchar('\n');
    
    printf("*hairetu[0] = %d, hairetu[0] = %p\n", *hairetu[0], hairetu[0]);
    printf("*hairetu[1] = %d, hairetu[1] = %p\n", *hairetu[1], hairetu[1]);
    printf("*hairetu[2] = %d, hairetu[2] = %p\n", *hairetu[2], hairetu[2]);
    putchar('\n');
    
    return 0;
}



この投稿にコメントする

削除パスワード

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