0

次のコードに奇妙なエラーがあります (多項式除算を行っています)。わかりませんが、問題はメソッドの宣言にあります。コードの後に​​、発生し続けるエラーをリストしました。

コードは次のとおりです。

  1
     2  int[] mul(int d[],int t,int idxq);
     3  int[] sub(int a[],int b[]);
     4  int check(int r[],int lengthr);
     5  int[] cp(int a[]);
     6  int[] div(int n[],int d[]);
     7
     8
     9
    10  int[] mul(int d[],int t,int idxq){
    11  int i;
    12  int size=sizeof(d)/sizeof(d[0]);
    13  int c[size];
    14  for(i=size-1;i>0;i--)
    15  c[idxq+i]=d[i]+t;
    16  return c;
    17  }
    18
    19  int[] sub(int a[],int b[]){
    20
    21  int i;
    22  int j;
    23  int size=sizeof(a)/sizeof(a[0]);
    24  int fin[size];
    25  for(j=0;jsize;j++)
    26  fin[j]=a[j];
    27  for(i=0;isize;i++)
    28  fin[i]=a[i]-b[i];
    29
    30  return fin;
    31  }
    32
    33  int check(int r[],int lengthr){
    34  int i;
    35  for(i=0;i<lengthr;i++){
    36  if(r[i]!=0)
    37  return 1;
    38  }
    39  return 0;
    40  }
    41
    42
    43  int[] cp(int a[]){
    44  int size=sizeof(a)/sizeof(a[0]);
    45  int i;
    46  int fin[size];
    47  for(i=0;i<size;i++)
    48  fin[i]=a[i];
    49
    50  return fin;
    51  }
    52
    53  int[] div(int n[],int d[]){
    54  int idxq=0;
    55  int t=0;
    56  int r[sizeof(n)/sizeof(n[0])]=cp(n);
    57  int lengthr= sizeof(r)sizeof(r[0]);
    58  int lengthd= sizeof(d)sizeof(d[0]);
    59
    60  while(check()!=0 && r[lengthr-1]=d[sizeof(d[0]])
    61  t=r[lengthr-1]d[sizeof(d[0]])-1];
    62  idxq=lengthr-d[sizeof(d[0]])-1]
    63  q[idxq]=t;
    64  r=sub[r,mul(d,t,idxq)];
    65  idxq=0;
    66
    67  }
    68
    69  int main(){
    70
    71  int a[4]={-42,0,12,1};
    72  int b[2]=(-3,1);
    73  div(a,b);
    74  }

エラーは次のとおりです。

q6.c:2: error: expected identifier or  Ç ( Ç  before  Ç [ Ç  token
q6.c:3: error: expected identifier or  Ç ( Ç  before  Ç [ Ç  token
q6.c:5: error: expected identifier or  Ç ( Ç  before  Ç [ Ç  token
q6.c:6: error: expected identifier or  Ç ( Ç  before  Ç [ Ç  token
q6.c:10: error: expected identifier or  Ç ( Ç  before  Ç [ Ç  token
q6.c:19: error: expected identifier or  Ç ( Ç  before  Ç [ Ç  token
q6.c:43: error: expected identifier or  Ç ( Ç  before  Ç [ Ç  token
q6.c:53: error: expected identifier or  Ç ( Ç  before  Ç [ Ç  token
q6.c: In function  Ç main Ç :
q6.c:72: error: invalid initializer

手伝ってくれてありがとう!:)

4

4 に答える 4

2

全然「変」じゃない。

C には、第一級市民としての配列はありません。関数からそれらを返すことはできません。

また、これ:

int size=sizeof(d)/sizeof(d[0]);

sizeof d関数に渡された配列は最初の要素へのポインターに崩壊し、したがってになるため、 は無効ですsizeof (int *)。配列の長さを別の引数として渡す必要があります。

于 2013-04-22T13:54:23.120 に答える
0

他の人が指摘しているようにarray、関数から返すことはできず、動的割り当てを使用しないと可変長配列を持つことはできませんが、スタックからローカル変数へのポインターを返そうとしていますcp

int fin[size];
 //... other code    
return fin;
       ^^^

fin関数のスタックに割り当てられ、終了すると存在しなくなります。考えられる解決策の 1 つは、動的メモリを使用してmallocそれを返すことですが、後でそのメモリpointerを覚えておく必要があります。free

int *fin = malloc(size*sizeof(int));

constこの方法には、サイズを必要としないという追加の利点もあります。を返すことができないarrayため、関数は を返す必要があるという事実に戻りますint *

int* cp(int a[], size_t size)
                 ^^^^^^

size_tの代わりに を使用していることに注意してくださいint。これは、type実際mallocに引数として取るものです。

void *malloc(size_t size);

そして彼らは を返しtypeますsizeof

于 2013-04-22T13:57:45.080 に答える