有的書上是這樣寫的:
#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;
}
我按照書上說的那樣聲明可變長度的數(shù)組,為什么不能編譯呢?
書上的格式是這樣的:unsigned long long int aa[test]
c99的編譯器才支持這種可變數(shù)組
如果你不是c99的編譯器
那你只要使用
#define test **來進行常量定義
在《Programming in C》,里面講數(shù)組時講到了“變量長度數(shù)組”,說有的編譯器支持這樣的用法:
int i=10;
char buf[ i ];
測試發(fā)現(xiàn)VC6是不支持這個的,但是GCC支持!我寫了這樣的測試代碼:
發(fā)現(xiàn)程序居然也支持i是負數(shù),而且在負數(shù)的情況下,GCC的內(nèi)存分配雖然怪異,但也是保證正確的。
可以用動態(tài)內(nèi)存來為數(shù)組分配空間:
#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); /*記住要釋放掉分配的內(nèi)存,否則內(nèi)存泄露*/
}
int main()
{
f(3,5);
}
但我試了一個這樣的程序。只能編譯,卻不能執(zhí)行
#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); /*記住要釋放掉分配的內(nèi)存,否則內(nèi)存泄露*/
}
int main(void)
{
f(3,5);
return 0;
}