0

重複の可能性: Cプログラミング言語で
sizeof(配列を指すポインター)
Sizeof配列を見つける方法は?

#include<stdio.h>

void doit(char x[10]){
    printf("%d\n", sizeof(x));
}

void main(void){
    char x[10];
    printf("%d\n", sizeof(x));
    doit(x);
}

**質問が最初に削除される理由がわかりません。**ここでの2つの出力は異なります。どうやら最初のものはxが配列であることを知っており、2番目のものはそれをptrだけ知っています。私の質問は、コンパイラが最初のケースではptrではなく配列であることを知っている理由です。

4

1 に答える 1

0

私はコンパイラの専門家ではありませんが、コンパイル段階で、コンパイラはセマンティック分析と呼ばれるものを実行します。このフェーズでは、型チェックが行われます。sizeofはコンパイル時の演算子でもあり (おそらく VLArrays を禁止します)、型チェック中にコンパイラは inが配列であり、main関数内がポインターであることを判別します。xdoit

同様に、コンパイラは家の所有者であるため、テナントのタイプを知っています。

ウィキでコンパイル プロセスについて読む

于 2012-05-07T17:22:35.460 に答える