Hopes

          Start Here..

           

          c/c++ 動態申請數組

           

          c/c++ 動態申請數組

          分類: 一些常識 2435人閱讀 評論(0) 收藏 舉報

          new和delete運算符用于動態分配和撤銷內存的運算符

          new用法:

                    1.     開辟單變量地址空間

                         1)new int;  //開辟一個存放數組的存儲空間,返回一個指向該存儲空間的地址.int *a = new int 即為將一個int類型的地址賦值給整型指針a. 

                         2)int *a = new int(5) 作用同上,但是同時將整數賦值為5

                    2.     開辟數組空間

                         一維: int *a = new int[100];開辟一個大小為100的整型數組空間

                         二維: int **a = new int[5][6]

                         三維及其以上:依此類推.

                   一般用法: new 類型 [初值]

          delete用法:

                    1. int *a = new int;

                         delete a;   //釋放單個int的空間

                    2.int *a = new int[5];

                         delete [] a; //釋放int數組空間

                    要訪問new所開辟的結構體空間,無法直接通過變量名進行,只能通過賦值的指針進行訪問.

                    用new和delete可以動態開辟,撤銷地址空間.在編程序時,若用完一個變量(一般是暫時存儲的數組),下次需要再用,但卻又想省去重新初始化的功夫,可以在每次開始使用時開辟一個空間,在用完后撤銷它.

           

          1. #include <iostream>  
          2. using namespace std;  
          3. int main()  
          4. {  
          5.     char *p=new char[10];  
          6.     scanf ("%s",p);  
          7.     printf ("%s",p);  
          8.     delete []p;  
          9.     while (1);  
          10.     return 0;  
          11. }  


           這是 二維數組的申請方法

          1. #define   ROW   100   
          2. #define   COL   200   
          3. #define   T   char   (int,float,....)   //通用數據類型   
          4. T   **   pTemp   ;   
          5. *pTemp   =   new   T[ROW]   ;   
          6. for   (int   i   =   0   ;   i   <   COL   ;   i   ++)   
          7.       pTemp[i]   =   new   T[COL};   
          8.   
          9. /////////////////delete   
          10. for   (int   i   =0   ;   i   <   COL   ;   i   ++)   
          11.         delete   []   pTemp[i]   ;   
          12. delete   [][]pTemp   ;  


           

          1.分配內存空間函數malloc

            調用形式: (類型說明符*) malloc (size) 功能:在內存的動態存儲區中分配一塊長度為"size" 字節的連續區域。函數的返回值為該區域的首地址。 “類型說明符”表示把該區域用于何種數據類型。(類型說明符*)表示把返回值強制轉換為該類型指針。“size”是一個無符號數。例如: pc=(char *) malloc (100); 表示分配100個字節的內存空間,并強制轉換為字符數組類型, 函數的返回值為指向該字符數組的指針, 把該指針賦予指針變量pc。

            2.分配內存空間函數 calloc

            calloc 也用于分配內存空間。調用形式: (類型說明符*)calloc(n,size) 功能:在內存動態存儲區中分配n塊長度為“size”字節的連續區域。函數的返回值為該區域的首地址。(類型說明符*)用于強制類型轉換。calloc函數與malloc 函數的區別僅在于一次可以分配n塊區域。例如: ps=(struet stu*) calloc(2,sizeof (struct stu)); 其中的sizeof(struct stu)是求stu的結構長度。因此該語句的意思是:按stu的長度分配2塊連續區域,強制轉換為stu類型,并把其首地址賦予指針變量ps。

            3.釋放內存空間函數free

            調用形式: free(void*ptr); 功能:釋放ptr所指向的一塊內存空間,ptr 是一個任意類型的指針變量,它指向被釋放區域的首地址。被釋放區應是由malloc或calloc函數所分配的區域。

           

          1. #include <stdio.h>   
          2. #include <malloc.h>   
          3. #include <stdlib.h>   
          4.   
          5. void main()   
          6. {   
          7.      int *array = 0, num, i;   
          8.      printf("please input the number of element: ");   
          9.      scanf("%d", &num);   
          10.   
          11.      // 申請動態數組使用的內存塊   
          12.      array = (int *)malloc(sizeof(int)*num);   
          13.      if (array == 0)             // 內存申請失敗,提示退出   
          14.      {   
          15.          printf("out of memory,press any key to quit...\n");   
          16.          exit(0);             // 終止程序運行,返回操作系統   
          17.      }   
          18.   
          19.      // 提示輸入num個數據   
          20.       printf("please input %d elements: ", num);   
          21.       for (i = 0; i < num; i++)   
          22.          scanf("%d", &array);   
          23.   
          24.      // 輸出剛輸入的num個數據   
          25.      printf("%d elements are: \n", num);   
          26.      for (i = 0; i < num; i++)   
          27.          printf("%d,", array);   
          28.   
          29.      printf("\b \n");    // 刪除最后一個數字后的分隔符逗號   
          30.      free(array);        // 釋放由malloc函數申請的內存塊   
          31. }  

          posted on 2013-09-20 20:05 ** 閱讀(276) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          公告

          你好!

          常用鏈接

          留言簿(2)

          隨筆檔案

          文章分類

          文章檔案

          新聞檔案

          相冊

          收藏夾

          C#學習

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 南开区| 凯里市| 时尚| 平泉县| 陇西县| 通山县| 资溪县| 石柱| 武宣县| 诸城市| 东乡族自治县| 新乐市| 和林格尔县| 大名县| 灵璧县| 修水县| 青神县| 夏河县| 荔波县| 巴青县| 钟山县| 大余县| 大安市| 英吉沙县| 吕梁市| 宁强县| 忻城县| 高碑店市| 板桥市| 长顺县| 五寨县| 昂仁县| 合肥市| 云龙县| 宣恩县| 历史| 昔阳县| 丽水市| 灵山县| 高陵县| 长白|