0

可能重复:如何在 C 编程语言中
找到数组的大小(指向数组的指针)大小?

#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);
}

** 我不知道为什么我的问题第一次被删除。** 这里的两个输出是不同的。显然第一个知道 x 是一个数组,第二个只知道它是一个 ptr。我的问题是为什么编译器知道在第一种情况下它是一个数组而不是一个ptr?

4

1 回答 1

0

我不是编译器专家,但在编译阶段,编译器会执行一些称为语义分析的操作。在此阶段,将完成类型检查。sizeof也是一个编译时运算符(可能不包括 VLArrays),并且在类型检查期间,编译器确定 in main,x是一个数组,而在doit函数中它是一个指针。

就像,编译器是房屋的所有者,因此它知道其租户的类型

在wiki上阅读编译过程

于 2012-05-07T17:22:35.460 回答