棧
由編譯器自動分配和釋放,在函式體中定義的變數通常在棧上,先進後出,
從高向低分配。
堆
一般由程式設計師分配和釋放
從低向高分配。一些分配記憶體的函式。
全域性區(靜態區) 初始化的全域性變數和靜態變數在一塊區域,未初始化的全域性變數和靜態變數在相鄰的另外一塊區域。
常量區
程式**區
函式被呼叫時會從**區取出,需要的引數以及函式體中的變數,會在棧中臨時分配,函式結束時, 變數會被釋放。
malloc
向系統申請分配
記憶體空間
eg : char * str = malloc(8)
char
*str =
malloc(8
* sizeof(char)) ;
釋放堆記憶體
: free (
) ; 不清除內容。
calloc
void *calloc(unsigned n , unsigned size ) ;
分配n個size 大小的空間。
realloc
void * realloc( void *p ;unsigned newsize ) ;
按新的長度重新分配記憶體。
memset
void *memset (void *s , int c , size_t n ) ;
s開始長度為n 的所有位元組賦值為c 。
通常用於結構體和陣列的資料清除。
memcpy
void *memcpy ( void *dest , const void * source , size _t n ) ;
從source 拷貝n個位元組到dest 中。
memcmp
int memcmp ( const void * buf1, const void * buf2 , unsigned int count ) ;
1、輸⼊入⼀乙個陣列長度,動態建立數 組,所有元素隨機⽣生成,輸出元素中 的最⼤大值。
2、有⼀一段⽂文字,將⽂文字中的所有單 詞,存放到⼀乙個字串陣列中。
void put10 (int * array , int count )
int *p = array ;
for ( int i = 0 ; i < count ; i ++ )
printf( "\n");
void get10 ( int * array , int count )
int * p = array ;
for ( int i = 0 ; i < count ; i ++ )
void dealarray ( int * array , int count )
int * max = array ;
int * min = array;
int *p = array;
for ( int i = 0 ; i < count ; i ++ )
p ++ ;
}swap(min, array);
for (int i = 0 ; i < count ; i ++ )
p ++ ;
}swap(max, array+count -1);
void swap ( int * a , int * b )
int temp = * a ;
*a = *b ;
*b = temp ;
// int array[10] = ;
// get10(array, 10);
// dealarray(array, 10);
// put10(array, 10);
void put10 (int * array , int count )
printf( "\n"); }
void get10 ( int * array , int count )
}void dealarray ( int * array , int count )
p ++ ;
} swap(min, array);
for (int i = 0 ; i < count ; i ++ )
p ++ ;
} swap(max, array+count -1); }
void swap ( int * a , int * b )
void changearr(int *array, int count )
*array = *array / *array ; }
void chan(int * array , int count )
}
動態記憶體分配
在c 中建立乙個物件時,我們必須要為這個物件申請一塊記憶體,而且要用建構函式對這塊記憶體進行初始化。c 中的new和delete相對於c的庫函式malloc和free在這方面有很大的優勢,所以我們主要講的是運算子new和delete。當用new來建立乙個物件時,它會自動在堆裡為物件分配記憶體並且為這...
動態記憶體分配
為什麼使用動態記憶體分配?c語言中的一切操作都是基於記憶體的 變數和陣列都是記憶體的別名,如何分配這些記憶體由編譯器在編譯期間決定 定義陣列的時候必須指定陣列唱的 而陣列長度是在編譯期就必須決定的 需求 程式執行的過程中,可能需要使用一些額外的記憶體空間 malloc和free malloc和fre...
動態記憶體分配
c的儲存類別有4種 自動的 auto 靜態的 statics 暫存器的 register 外部的 extern 全域性變數時分配在記憶體中的靜態儲存區 靜態區域性變數屬於靜態儲存類別,在靜態儲存區內分配儲存單元,是在編譯時賦初值的,只賦初值一次,在程式執行時它已有初值,以後每次呼叫函式時不再重新賦初...