菜鸟请教几个关于变长数组(VLA)的问题
1.为什么VS2010不支持C中的变长数组特性呢?有什么比较适合新手的支持VLA的IDE吗?
2.《C Primer Plus中文版》第五版P344中有一段话:
“一个区别在于VLA是自动存储的。自动存储的结果之一就是VLA所用内存空间在运行完定义部分之后会自动释放。……另一方面,使用由malloc()创建的数组不必局限在一个函数中。例如,函数可以创建一个数组并返回指针,供调用该函数的函数访问。”
我想知道,变长数组是否可以像malloc()创建的数组那样,先在函数A中创建,然后由函数A将数组名返回给调用它的函数B,这样就可以在函数B中存在,从而也可以“不必局限在一个函数中”呢?虽然VLA是自动存储的,但是自动存储类的变量只要有指针还在引用它,那么它的内存就不会释放呀。
譬如说,像这样实现两个矩阵相乘可以吗?:
int(*)[p] matrixMultiply(int m,int n,int k,int a[m][n],int b[n][p])
{
int i,j,k,c[m][p];
for(i = 0;i < m;i++)
{
for(j = 0;j < p;j++)
{
for(k = 0,c[i][j]=0;k < n;k++)
{
c[i][j] += a[i][kl * b[k][j];
}
}
}
return c;
}
3.VLA可否用在结构体的定义中?比如:
typedef struct VLA
{
int length;
int a[length];
} VLA;
这样可以吗?
4.下面这段代码中关于函数返回值类型的声明不对吗?为什么VS2010编译通不过呢?
int(*)[5] f()
{
int a[2][5] = {{1,2,3,4,5},{6,7,8,9,10}};
return a;
}