Posted on 2007-07-01 10:40
停留的风 阅读(1632)
评论(0) 编辑 收藏 所属分类:
C语言学习历程
有的书上是这样写的:
#include <stdio.h>
int main (void)
{
int test;
printf ("OK/n");
scanf ("%i",&test);
unsigned long long int aa[test];
printf ("aa[test]=%i/n",aa[test]);
retrun 0;
}
我按照书上说的那样声明可变长度的数组,为什么不能编译呢?
书上的格式是这样的:unsigned long long int aa[test]
c99的编译器才支持这种可变数组
如果你不是c99的编译器
那你只要使用
#define test **来进行常量定义
在《Programming in C》,里面讲数组时讲到了“变量长度数组”,说有的编译器支持这样的用法:
int i=10;
char buf[ i ];
测试发现VC6是不支持这个的,但是GCC支持!我写了这样的测试代码:
发现程序居然也支持i是负数,而且在负数的情况下,GCC的内存分配虽然怪异,但也是保证正确的。
可以用动态内存来为数组分配空间:
#include <malloc.h>
#include <stdio.h>
void f(int k, int m)
{
int i, size = m >= k ? m : k;
int* a = (int*)malloc(sizeof(int)*size);
if( a == NULL )
printf( "Insufficient memory available\n" );
else
for(i = 1; i <= size; ++i)
{
a[i] = i;
printf("%d ",a[i]);
}
free(a); /*记住要释放掉分配的内存,否则内存泄露*/
}
int main()
{
f(3,5);
}
但我试了一个这样的程序。只能编译,却不能执行
#include <malloc.h>
#include <stdio.h>
void f(int k, int m)
{
int i, size = m >= k ? m : k;
int* a = (int*)malloc(sizeof(int)*size);
if( a == NULL )
printf( "Insufficient memory available\n" );
else
printf("Please enter %i int numbers!\n",size);
for(i=1;i<=size;++i)//或者从0开始我都试过啦
{
scanf("%i",a[i]);
}
for(i = 1; i <=size; ++i)
{
printf("%d ",a[i]);
}
free(a); /*记住要释放掉分配的内存,否则内存泄露*/
}
int main(void)
{
f(3,5);
return 0;
}