Chinaunix首页 | 论坛 | 博客
  • 博客访问: 109809
  • 博文数量: 19
  • 博客积分: 1716
  • 博客等级: 上尉
  • 技术积分: 275
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-25 14:03
文章分类

全部博文(19)

文章存档

2011年(8)

2010年(11)

我的朋友

分类: C/C++

2010-04-26 05:27:51

奇怪的代码.

今天发现了一段奇怪的代码.这段代码竟然可以在GNU GCC/G++下编译通过,并且能够运行.但是运行结果却在想象之中意料之外.

    #include 

    #define NUM getnum()

    int getnum(){

        int x=0;

        scanf("%d", &x);

        printf("%d\n", x);

        return x;

    }

    

    int main(int argc, char** argv){

        int array[NUM];

        printf("array size = %d\n", sizeof(array));

        return 0;

    }

GCC/G++下可以编译通过,运行结果如下:

    10

    10

    arraay size = 40

    20

    20

    arraay size = 80

    -1

    -1

    arraay size = -4

    现在的问题是:

    1.sizeof是在运行期计算的么?

    2.array的空间到底是分配到哪儿了,heap or stack?

阅读(1656) | 评论(1) | 转发(0) |
0

上一篇:没有了

下一篇:Linux下解压命令大全

给主人留下些什么吧!~~

xmr_gxcfe2010-05-10 11:38:46

sizeof操作符是在运行期计算的 array的空间分配在main的函数栈中