302班

          java突擊隊
          posts - 151, comments - 74, trackbacks - 0, articles - 14
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          C語言中的變量長度數組

          Posted on 2007-07-01 10:40 停留的風 閱讀(1644) 評論(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;
          }

          主站蜘蛛池模板: 乐安县| 徐水县| 永昌县| 罗定市| 云梦县| 行唐县| 石首市| 东明县| 宝鸡市| 江达县| 永登县| 平泉县| 长汀县| 长岛县| 明溪县| 五常市| 定远县| 平遥县| 沧源| 莎车县| 华蓥市| 邵阳市| 河池市| 文登市| 图片| 辽中县| 达孜县| 南昌县| 延庆县| 衡山县| 宜兰市| 田东县| 北辰区| 丰县| 马龙县| 积石山| 漠河县| 鱼台县| 光山县| 长葛市| 广南县|