由编译器自动分配和释放,在函数体中定义的变量通常在栈上,先进后出,
从高向低分配。
堆 一般由程序员分配和释放 从低向高分配。一些分配内存的函数。
全局区(静态区) 初始化的全局变量和静态变量在一块区域,未初始化的全局变量和静态变量在相邻的另外一块区域。
常量区
程序代码区 函数被调用时会从代码区取出,需要的参数以及函数体中的变量,会在栈中临时分配,函数结束时, 变量会被释放。
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( " %d " , *(p+i));
}
printf( "\n");
}
void get10 ( int * array , int count )
{
int * p = array ;
for ( int i = 0 ; i < count ; i ++ ) {
scanf( "%d" , p+i) ;
}
}
void dealArray ( int * array , int count )
{
int * max = array ;
int * min = array;
int *p = array;
for ( int i = 0 ; i < count ; i ++ ) {
if (*max < *p ) {
max = p ;
}
p ++ ;
}
swap(min, array);
for (int i = 0 ; i < count ; i ++ ) {
if (*min > *p ) {
min = p ;
}
p ++ ;
}
swap(max, array+count -1);
}
void swap ( int * a , int * b )
{
int temp = * a ;
*a = *b ;
*b = temp ;
}
// int array[10] = {0} ;
// get10(array, 10);
// dealArray(array, 10);
// put10(array, 10);
void put10 (int * array , int count )
{
int *p = array ;
for ( int i = 0 ; i < count ; i ++ ) {
printf( " %d " , *(p+i));
}
printf( "\n");
}
void get10 ( int * array , int count )
{
int * p = array ;
for ( int i = 0 ; i < count ; i ++ ) {
scanf( "%d" , p+i) ;
}
}
void dealArray ( int * array , int count )
{
int * max = array ;
int * min = array;
int *p = array;
for ( int i = 0 ; i < count ; i ++ ) {
if (*max < *p ) {
max = p ;
}
p ++ ;
}
swap(min, array);
for (int i = 0 ; i < count ; i ++ ) {
if (*min > *p ) {
min = p ;
}
p ++ ;
}
swap(max, array+count -1);
}
void swap ( int * a , int * b )
{
int temp = * a ;
*a = *b ;
*b = temp ;
}
void changeArr(int *array, int count )
{
for ( int i = 1 ; i < count ; i ++ ) {
*(array+i) = *(array+i) / *array ;
}
*array = *array / *array ;
}
void chan(int * array , int count )
{
for ( int i = 0 ; i < count /2 ; i ++ ) {
int temp = *(array+i) ;
*(array+i) = *(array+count -1-i) ;
*(array+count -i-1) = temp ;
}
}
0 0