//
// main.m
// c10_動態記憶體分配 //
// created by dllo on 15/7/13.
//#import
void func()
char * fun()
// 定義乙個全域性變數
int global =10;
// 測試靜態變數只會初始化一次
void test()
int main(int argc, const
char * argv)
// int *p = malloc(10 * sizeof(int ));
// // 開闢十個位元組空間
// char * p=malloc(10);
//
// // 然後char *指標來接收
// strcpy(p, "iphone" );
// // 對這塊記憶體進行賦值,賦值內容"iphone"
// printf("%s\n",p);
// // 如果對p進行指標的重指向,原本儲存堆空間的位址被替換,這部分堆空間就找不到了,發生這種問題稱為記憶體洩露
// // **
// free(p);
// // 過度釋放
free(p); // 崩潰
// // ( 開闢
使用** )
// printf("%d\n",p[2]);
// 野指標:對一塊釋放掉的記憶體操作
// 1.先使用malloc,申請相應位元組數的空間
// 2.使用這部分記憶體
// 3.別忘了對他進行釋放,不要過度釋放
// 練習
// char str="fjaikgfasg14fs5df4a2445as";
// int j = 0; // 儲存數字個數
// for (int i = 0; i < strlen(str); i++)
// }
// // 為數字進行記憶體分配,有多少個數字相應的分配多少位元組數
// char *p = malloc(j + 1);
// // 把數字放到堆空間的字串裡
// int numindex =0;
// for (int i=0; i// if (str[i] >= '0' && str[i] <= '9')
// }
// // 把最後一位\0進行賦值
// p[numindex]='\0';
// printf("%s\n",p);
// free(p);
// calloc
// 用法和malloc差不多,只不過比malloc多乙個刷碗的動作,把會每個位元組的內容都清零
// void * calloc(int n ,int size)
// int *p= calloc(10, sizeof(int));
// for (int i=0; i<10; i++)
// printf("\n");
// int *p1 =malloc(10*sizeof(int));
// for (int i=0; i<10; i++) printf("\n");
// int a = 10,b = 5, c = 1;
// // 指標陣列
// int *arr[3]=;
// for (int i =0; i<3; i++)
// char *str[3]=;
// for (int i=0; i<3; i++)
// 輸入三個人的姓名,根據姓名長度,動態分配記憶體,然後進行儲存,最後進行列印
//定義乙個指標陣列
// char *words[3]=;
// for (int i=0; i<3; i++) for (int i = 0; i<3; i++)
// // 釋放
// for (int i=0; i<3; i++)
//
//
// // realloc:重新進行記憶體分配
// int *p=calloc(10, sizeof(int));
// int *pnew=realloc(p, 80);
// printf("%p\n",p);
// printf("%p\n",pnew);
// 記憶體操作函式
// 記憶體初始化
// int *p =malloc(40);
// // 對記憶體進行初始化設定
// // 1.要初始化的空間
// // 2.初始化把值設定成0
// // 3.設定的範圍
// memset(p, 0, 40);
// for (int i=0; i<10; i++) printf("\n");
// // 記憶體拷貝
// // 第三個引數,拷貝的範圍位元組數
// int *p=calloc(10, sizeof(int));
// int *pnew=calloc(10, sizeof(int));
// for (int i=0; i<10; i++) printf("\n");
// memcpy(pnew, p, 40);
// for (int i=0; i<10; i++)
// printf("\n");
// 記憶體比較
// 第三個引數:比較的範圍
// int *p1 =calloc(1, sizeof(int));
// int *p2 =calloc(1, sizeof(int));
// *p1=255;
// *p2=100;
// printf("%d\n",memcmp(p1, p2, 4));
// // 比較的範圍從0--255
// int *p =malloc(12);
// int *p1=calloc(3, sizeof(int));
// memset(p, 0, 12);
// for (int i=0; i<3; i++)
// // 最後比較
// if (memcmp(p, p1, 12)==0) else
// free(p);
// free(p1);
return 0;
}
c語言動態記憶體分配 C 動態記憶體分配
動態記憶體分配 雖然通過陣列就可以對大量的資料和物件進行有效地管理,但是很多情況下,在程式執行之前,我們並不能確切地知道陣列中會有多少個元素。這種情況下,如果陣列宣告過大,就會造成浪費 宣告過小,就會影響處理。在c 中,動態記憶體分配技術可以保證程式在執行過程中按照需要申請適量記憶體,使用後釋放,從...
C語言動態記憶體分配
c語言動態記憶體分配 動態資料結構可以在執行時靈活新增 刪除或重排資料項。在執行時分配記憶體空間的過程稱為動態記憶體分配。記憶體分配函式如下 malloc 分配所需的位元組大小,並返回指向所分配空間的第乙個位元組的指標 calloc 為元素陣列分配空間,並初始化為零,然後返回指向該記憶體的指標 fr...
C語言 動態記憶體分配
c語言有儲存變數的區域稱之為棧 stack 除此之外 c語言還允許建立自己的動態記憶體區域 以存放一些臨時的資料 這區域稱之為 堆 heap 也就是存放執行時的資料 可以根據程式的需要 向系統申請所需大小的空間 由於未宣告部分定義他們為變數或者陣列因此只能通過指標去訪問 建立記憶體動態分配主要由4個...