2016-03-30 17 views
0

大きな作業の一部Cの配列の長さ、つまり配列内の要素の数を表示しようとしています。配列は倍精度の配列であり、配列内の倍数である単一の整数を出力したい。 私はこのコードを持っている:c印刷配列の長さ

int array_length(double array[]) { 
    double length = 0; 
    length = sizeof(array)/sizeof(double); 
    printf("%G", length); 
    return 0; 
} 

をし、私はこのようなメインでそれを呼び出す:

int main(void) { 
    double test[] = {1.1,2.2,3.3,4.4,5.5}; 
    array_length(test); 
    return 0; 
} 

しかし、これはエラーを返します:

error: ‘sizeof’ on array function parameter ‘array’ will return size of ‘double *’ [-Werror=sizeof-array-argument]

研究は

ことを私に言っています
sizeof(array)/sizeof(double); 

は私に配列の長さを与えます、そして、私は "%G"を使ってこのコードが返す倍数を印刷できるようにしようとしています。

"double *"はlong doubleを意味するので、 "%G"を "%LG"に変更して "double"を "double double"に変更しようとしましたが、問題は解決しませんでした。ここで何が起こっているのですか?

+0

'%zu'を使用して' size_t'値を出力してください – LPs

+0

皆様にお返事ありがとうございます、今問題が見えます。私が解決策を見いだせば、私は試し続けていきます。 – Isaac

答えて

0

sizeofは、そのスコープ内でサイズがわかっている場合にのみ配列のサイズを計算できます。例えば:

しかし
double array[10]; 
printf("%d", sizeof(array)/sizeof(double)); // prints 10 

void printSize(double array[]) { 
    printf("%d", sizeof(array)/sizeof(double)); // doesn't print 10 
} 

ここdouble array[]double* arrayのためだけの構文糖ですので。

1

配列は関数の引数の中でポインタに崩れてしまい、配列のサイズを関数から見つけることができません。

パラメータの配列のサイズを渡す必要があります。

+0

"配列のサイズをパラメータとして渡す必要があります。"それはOPが計算したいものです! – CinCout

+0

@HappyCoder私はちょうど彼がポインタから計算することができないので、何とかサイズを提供しなければならないと言っています。 – blazs

+0

Cは配列を元の配列形式(つまり 'main'()')で "見て"いるので、実際には配列の大きさは計算が簡単です。 – tofro