2017-06-05 7 views
0

im学習cプログラミング。 のグローバル構造体配列を定義したいと思います。配列の各メンバーが複素数の構造体であるという配列へのポインタがあります。 私の目標は、この配列にポインタ(* vars)でアクセスし、メインのすべての関数でそのメンバーを変更/読み込めるようにすることです。ポインタのグローバル構造体配列の定義

この問題のトラブルに直面していますが、それぞれの事柄をどのように定義するのかはわかりません。イムは、[I]をVARSをアクセスもしようとしているエラーを取得

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

typedef struct complext 
{ 
    double real; 
    double img; 
} complex; 
complex* vars; 

int main() 
{ 
    int i; 
    vars = malloc(6 * sizeof(vars)); 
    for (i = 0; i < 6;) 
     vars[i]->real = 0; 
} 

イム: 私はこの次のコードを試してみました。あなただけvars[i].realの代わりvars[i]->realを使用する必要がありますので、 メンバーの「リクエスト 『本当の』イム何かない構造体または共用体。 ありがとう!

+0

'malloc'の戻り値をタイプキャストする必要があります。同様に: 'vars =(var *)malloc(6 * sizeof(* vars));'。また、最後の行を 'vars [i] .real = 0;'に変更する必要があります。 –

+0

いいえ、必要がないときはキャストしないでください。 申し訳ありませんが、私のコメントはShiva'sに答えていました。 – ncarrier

+0

それを試しましたが、同じエラーがまだ発生しています。 – Yakalolo

答えて

0

VARSはタイプstruct complext *のですが、VARS [i]はタイプstruct complextであります。

2

あなたのコード内の3つのバグ
1. vars[i]->realがありvars[i].realでなければなりません。Plsはあなたがcomplex構造体へのグローバルポインタであることをvarsを定義しているデータ型を称える。配列の使用としてそれを定義するには:complex vars[6]; - - >私は、これは[OK]をする必要があり学ん(@Stargateurによって投稿されたコメントを見て)
3.最後にforループ - >ジョゼ・フォンテのANS @
2. mallocを見て(complex*)にキャストvoid *を返します。 iのincステートメントはありません。
4. mallocは、varsがcomplex型のポインターであるため、6ポインター分のメモリー(6 * sizeof(int))のみを割り当てます。 sizeof(vars)sizeof(complex)しなければならない - > @xingは、アレイと

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

typedef struct complext { 
double real; 
double img; 
}complex; 
complex *vars; 

int main() 
{ 
int i; 
vars= (complex*)malloc(6*sizeof(complex)); 
for(i=0;i<6; i++) 
vars[i].real=0; 
} 
+1

2ではなく1と3に同意します。Shivaが見つけたので、 'sizeof(vars)'の代わりに 'sizeof(* vars)'を使用してください。 – ncarrier

+2

2. [mallocの結果をキャストしますか? (https://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc) – Stargateur

+0

@Stargateur:それを指してくれてありがとう!! – Zakir

1

あなたのミキシングポインタをこれを指摘しました。それを配列として(@Zakirによって既に行われたポインタとして):

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

typedef struct complext { 
    double real; 
    double img; 
}complex; 
complex vars[6]; 

int main() 
{ 
    int i; 

    for(i=0;i<6;i++) 
    vars[i].real=0; 
} 
関連する問題