302班

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

          C語言中的變量長度數組

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

          主站蜘蛛池模板: 吴桥县| 岳池县| 紫云| 翁牛特旗| 宜章县| 陇川县| 承德市| 集安市| 铜鼓县| 江山市| 西贡区| 修水县| 洪江市| 金昌市| 泊头市| 绩溪县| 利津县| 吴旗县| 湄潭县| 吴堡县| 巢湖市| 宝丰县| 五家渠市| 华蓥市| 开化县| 荔波县| 定襄县| 临颍县| 镇坪县| 彭泽县| 呈贡县| 朝阳区| 蒙城县| 天柱县| 乌恰县| 广河县| 中西区| 元朗区| 特克斯县| 伊宁市| 杂多县|