c/c++ 動態申請數組
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可以動態開辟,撤銷地址空間.在編程序時,若用完一個變量(一般是暫時存儲的數組),下次需要再用,但卻又想省去重新初始化的功夫,可以在每次開始使用時開辟一個空間,在用完后撤銷它.
- #include <iostream>
- using namespace std;
- int main()
- {
- char *p=new char[10];
- scanf ("%s",p);
- printf ("%s",p);
- delete []p;
- while (1);
- return 0;
- }
這是 二維數組的申請方法
- #define ROW 100
- #define COL 200
- #define T char (int,float,....) //通用數據類型
- T ** pTemp ;
- *pTemp = new T[ROW] ;
- for (int i = 0 ; i < COL ; i ++)
- pTemp[i] = new T[COL};
- /////////////////delete
- for (int i =0 ; i < COL ; i ++)
- delete [] pTemp[i] ;
- 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函數所分配的區域。
- #include <stdio.h>
- #include <malloc.h>
- #include <stdlib.h>
- void main()
- {
- int *array = 0, num, i;
- printf("please input the number of element: ");
- scanf("%d", &num);
- // 申請動態數組使用的內存塊
- array = (int *)malloc(sizeof(int)*num);
- if (array == 0) // 內存申請失敗,提示退出
- {
- printf("out of memory,press any key to quit...\n");
- exit(0); // 終止程序運行,返回操作系統
- }
- // 提示輸入num個數據
- printf("please input %d elements: ", num);
- for (i = 0; i < num; i++)
- scanf("%d", &array);
- // 輸出剛輸入的num個數據
- printf("%d elements are: \n", num);
- for (i = 0; i < num; i++)
- printf("%d,", array);
- printf("\b \n"); // 刪除最后一個數字后的分隔符逗號
- free(array); // 釋放由malloc函數申請的內存塊
- }