302班

          java突擊隊(duì)
          posts - 151, comments - 74, trackbacks - 0, articles - 14
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          有的書(shū)上是這樣寫的:
          #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ū)上說(shuō)的那樣聲明可變長(zhǎng)度的數(shù)組,為什么不能編譯呢?
          書(shū)上的格式是這樣的:unsigned long long int aa[test]

          c99的編譯器才支持這種可變數(shù)組
          如果你不是c99的編譯器
          那你只要使用
          #define test **來(lái)進(jìn)行常量定義

          《Programming in C》,里面講數(shù)組時(shí)講到了“變量長(zhǎng)度數(shù)組”,說(shuō)有的編譯器支持這樣的用法:

          int i=10;
          char buf[ i ];

          測(cè)試發(fā)現(xiàn)VC6是不支持這個(gè)的,但是GCC支持!我寫了這樣的測(cè)試代碼:
          發(fā)現(xiàn)程序居然也支持i是負(fù)數(shù),而且在負(fù)數(shù)的情況下,GCC的內(nèi)存分配雖然怪異,但也是保證正確的。

           
          可以用動(dòng)態(tài)內(nèi)存來(lá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);
          }
          但我試了一個(gè)這樣的程序。只能編譯,卻不能執(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開(kāi)始我都試過(guò)啦
          {
              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;
          }

          主站蜘蛛池模板: 高邮市| 沁源县| 辽阳县| 宣城市| 山东| 四子王旗| 长宁县| 合川市| 巴塘县| 高雄县| 金昌市| 泊头市| 玉屏| 尖扎县| 惠州市| 雷波县| 伊川县| 凉城县| 武山县| 浦县| 辽中县| 益阳市| 九江县| 巴马| 平潭县| 陕西省| 阿图什市| 宜阳县| 石嘴山市| 淮南市| 濮阳市| 青海省| 遂川县| 翁源县| 邵阳市| 清镇市| 老河口市| 汶川县| 确山县| 三门峡市| 福清市|