【发布时间】:2016-01-24 11:44:50
【问题描述】:
我很惊讶地看到这段代码可以正常工作。我不知道为什么
#include<stdio.h>
int main(){
int row,col,i,j;
scanf("%d %d",&row,&col);
int a[row][col];
for(i=0;i<row;i++)
for(j=0;j<col;j++)
scanf("%d",&a[i][j]);
for(i=0;i<row;i++){
for(j=0;j<col;j++)
printf("%d ",a[i][j]);
printf("\n");
}
}
既然 C 是一种编译语言,那么它是如何为数组 a[row][col] 分配内存的?既然在编译的时候不知道行列的值,那它是如何制作机器码和给程序设置地址空间的呢?为什么这是作为解释器语言工作的原因,如果这是一种创建动态数组的方法,那么为什么要教我们使用 malloc 在 C 中创建动态数组。
【问题讨论】:
-
其实不是动态数组而是半动态的