转自:http://baike.baidu.com/view/1078660.htm
3. sizeof的常量性
sizeof的计算发生在编译时刻,所以它可以被当作 常量 表达式 使用,如: char ary[ sizeof( int ) * 10 ]; // ok 最新的C99标准规定sizeof也可以在运行时刻进行计算,如下面的程序在 Dev-C++ 中可以正确执行: int n; n = 10; // n动态赋值 char ary[n]; // C99也支持 数组 的动态定义 printf("%d\n", sizeof(ary)); // ok. 输出10 但在没有完全实现C99标准的 编译器 中就行不通了,上面的代码在VC6中就通不过编译。所以我们最好还是认为sizeof是在编译期执行的,这样不会带来错误,让程序的可移植性强些。