2016-05-12 10 views
0

私は関数と構造体とポインタの使い方を学びました。私はそれらをすべて1つにまとめたい。しかし、私が書いたコードはうまくいかないようです。コンパイラは、テストが宣言されていない識別子であることを通知します。Cでの構造体、ポインタ、関数の使い方は?

#include <stdio.h> 
#include <stdlib.h> 

struct character 
{ 
    int *power; 
}; 

void test (use_power) 

int main() 
{ 
    test (use_power) 
    printf("%d\n",*power); 

    return 0; 
} 

void test() 
{ 
    int use_power = 25; 
    struct character a; 
    a.power = &use_power; 
} 
+2

このコードは何ですか?それは完全に間違っています。多くの点で間違っています。ちょっとしたコードです。 –

+0

"コンパイラは、テストが宣言されていない識別子であることを私に伝えます。" ...それはすべてあなたに伝えますか? – DigitalNinja

+0

@DigitalNinja *最初の*エラーで停止する必要があります。すべてのプログラムはエラーです。 –

答えて

0

あなたのコードが間違っているようです。 testのためのあなたの定義は

void test() 
{ 
    int use_power = 25; 
    struct character a; 
    a.power = &use_power; 
} 

として引数が含まれていませんが、あなたのプロトタイプが誤って入れて1つの引数

void test (use_power) 

が含まれています。まず、プロトタイプ宣言の最後にセミコロン;がなく、次にコードを見て、use_powerは変数でありデータ型ではないため、関数宣言でのみ存在することはできません。

引数の不一致エラーが発生します。あなたは絶対に間違っているmain()

printf("%d\n",*power); 

でラインを使用している

。構造変数を持たない構造体のメンバーにはアクセスできません。

そして再び、あなたがそう正しくあなたの質問を入れていなかったとして、あなたがこの行の前に間違ったtest()にお電話した後

;を言及していない、私はあなたが達成したいかを把握しなければなりません。構造体のポインタメンバの整数のアドレスを保持し、その値を出力したいと思います。

以下は、必要に応じて機能するコードスニペットです。

#include <stdio.h> 
#include <stdlib.h> 

struct character 
{ 
    int *power; 
}; 
struct character a; //define a structure variable 

void test(); 

int main() 
{ 
    test(); 
    printf("%d\n",*(a.power)); // print the member of structure variable a 

    return 0; 
} 

void test() 
{ 
    int use_power = 25; 
    a.power = &use_power; 
} 
+0

ありがとう!これは私が探していたものです!再度、感謝します! –

+0

私はそれをすることができるのか分からなかった。もし私が知っていたら、私は早くそうしたでしょう! –

+0

ご協力いただきありがとうございます。 –

1

あなたのコードは、多くのミスがあり、それも

  1. 複数不足しているセミコロンをコンパイルすることはできません:ここではコードです。あまりにも不足しているセミコロンでここ

    test (use_power) 
    

    test()

  2. 暗黙的な宣言。

  3. powermain()で宣言されていません。

  4. このライン

    void test use_power() 
    

    は意味をなさないし、無効であり、また何のセミコロンを持っていません。

  5. 端で定義test()aインスタンスはtest()に対してローカルであり、そのようにする際test()リターンを割り当て解除します。 use_powerintは、まったく同じ問題を抱えており、関数から返されたアドレスを抽出しようとすると、関数が返ってからアクセスできないため、無用です。

あなたは何をしようとしていたのか分かりませんが、

#include <stdio.h> 
#include <stdlib.h> 

struct character { 
    int *power; 
}; 

/* Decalre the function here, before calling it 
* or perhaps move the definition here 
*/ 
void test(struct character *pointer); 
/*        ^please */ 

int 
main(void) /* int main() is not really a valid signature */ 
{ 
    struct character instance; 
    test(&instance); 
    if (instance.power == NULL) 
     return -1; 
    printf("%d\n", *instance.power); 
    free(instance.power); 
    return 0; 
} 

void 
test(struct character *pointer) 
{ 
    pointer->power = malloc(sizeof(*pointer->power)); 
    if (pointer->power != NULL) 
     *pointer->power = 25; 
} 
+0

testは関数の名前です。彼は、use_powerというパラメータを取るtestという関数を宣言することを意図していたと思います。残念なことに彼が実際にテストを定義するとき、それはパラメータをとらないが、存在しないuse_powerパラメータを変更する。あるいは、私は間違っているかもしれません。 –

+0

私は答えが多分この行を削除することだと思います: 'void test use_power()'とmainのtest関数呼び出しからuse_powerパラメータを削除してください。少なくともそれは理にかなっています。 –

+0

ok ...しかし、ボイドテストの範囲外の値を取得するためにポインタを使用することはできませんか?私は構造体にポインタを宣言しようとしています。そのポインタを関数内で使用します。そして、その結果をmain関数に出力します。 –

0

#include <stdio.h> 

struct character { 
    int *power; 
}; 

void test(struct character *var); 

int main (void){ 
    struct character use_power; 
    int power = 5; 

    use_power.power = &power; 
    test(&use_power); 
    printf("%d\n", power); 

    return 0; 
} 

void test(struct character *var){ 
    int use_power = *var->power; 
    *var->power = use_power * use_power; 
} 
関連する問題