C语言-内存管理

4.1.1


(1)定义一个int类型的指针pn,并初始化为NULL。
    int *pn=NULL;


(2)使用malloc为pn分配一块动态的适合存储一个int值的内存。
    pn=(int*)malloc(sizeof(int));


(3)通过指针pn,将整数25保存到刚刚分配的内存中。
  *pn=25;


(4) 分配显示*pn和pn的值,分析输出的结果。
    printf(" *pn 的值 为 : %d  , pn 的值  为  : %p \n",*pn,pn);




(5) 为指针pn所指向的内存重新赋值100。
    pn=(int*)realloc(pn,100);


(6) 继续显示*pn和pn的值,分析输出结果。
    printf("为指针pn所指向的内存重新赋值100  *pn 的值 为 : %d  , pn 的值  为  : %p \n",*pn,pn);


(7) 使用free释放为指针pn分配的动态内存。
    free(pn);


(8) 显示使用free后,*pn和pn的值,并分析结果。
    printf("显示使用free后    *pn 的值 为 : %d  , pn 的值  为  : %p \n",*pn,pn);


(9) 将指针pn的值赋值NULL,分析原因并打印指针pn的值。
    pn=NULL;
    printf("指针pn的值赋值NULL 打印 pn  的值为  : %p",pn);


(10) 定义一个double指针pf,并在定义时使用malloc为其分配一块适合存储double类型的内存,并在分配时将10.25赋值给动态内存。
    double *pf=(double*)malloc(sizeof(double));


(11) 分别显示pf和*pf的值。
    printf("pf 的值 为 :  %p  , *pf 的值为 :%d \n",pf,*pf);




(12) 释放指针pf所指向的动态内存。
  free(pf);


(13) 并将内存释放后的pf赋值为NULL。
  free(pf); pf=NULL;
(14) 显示指针pf的值。
  printf("pf 的值为 :%p\n",pf);


}




4.2.1
#include <stdio.h>
#include <stdlib.h>


int main(void) {
double *parray = (double*) malloc(3);
*parray = 100;
*(parray + 1) = 20.5;
*(parray + 2) = 34.2;
printf("%.1lf\n", *parray);


int i;
for (i = 0; i < 3; i++) {
printf("动态数组的值  :%.1lf\n 每个数组元素的地址 :%d\n", *(parray + i), (parray + i));
}
free(parray);
parray = NULL;
return EXIT_SUCCESS;
}


4.3.1
#include <stdio.h>
#include <stdlib.h>


int main(void) {
char *address=NULL;
address=(char*)malloc(20*sizeof(char));
memset(address,'\0',20);
strcpy(address,"Beijing");
   printf("address中字符串的值  为 : %s\n",address);
   char *area="Chaoyang";
     strcpy(address,area);
     printf("address中的字符串 : %s \n ",address);
   char zone[20]="ABCD";
   strcpy(address,zone);
         printf("将zone中的字符串,赋值给address  address中的字符串 : %s \n ",address);
 free(address);address=NULL;


return EXIT_SUCCESS;
}


5.1.1


#include <stdio.h>
#include <stdlib.h>


int main(void) {
       int i=0,j=0,n=0;
 printf("请输入行数  :");
 scanf(" %d", &n);
 int **p=(int*)calloc(n,sizeof(int));
 for(i=0;i<n;i++)
 {int m=0;
 printf("请输入 第    %d 行的 列数    :",i);
 scanf(" %d", &m);
 p[i]=(int*)calloc(m,sizeof(int));
   for(j=0;j<m;j++)
   {
   *(p[i]+j)='0';
   }
   *(p[i]+j)='\0';
 }
// 输出
for(i=0;i<n;i++)
{
for(j=0;*(p[i]+j)!='\0';j++)
{
         printf(" %c ",*(p[i]+j));
}
printf(" \n ");


}
}


void* fun52( char *str)
{
char *p=(char*)malloc(strlen(str));
strcpy(p,str);
 return  p;
}






5.3


#include <stdio.h>
#include <stdlib.h>


int main(void) {


{
 char *name=NULL;
 name=(char*)realloc(30,sizeof(char));
   memset(name,'\0',0);
   strcpy(name,"Ramos");
   printf("name中字符串的值 : %s\n",name);
  char *Firstname="Sergio";
   strcpy(name,Firstname);
   printf("将Firstname中的字符串,赋值给name  显示赋值后name中的字符串 : %s\n",name);
   char club[]="RM";
   strcpy(name,club);
   printf("将club中的字符串,赋值给name  显示赋值后name中的字符串 : %s\n",name);
   free(name);name=NULL;








}


}




5.4
#include <stdio.h>
#include <stdlib.h>


int main(void) {


{
struct stuInfo
{
int stuID;
char *name;
int score;
};
printf("请输入数组长度 ");
int len=0,i=0;
char str[20];
scanf("%d",&len);
printf("%d",len);
struct stuInfo *stu=calloc(len,sizeof(struct stuInfo ));
struct stuInfo *stus=NULL;
for(i=0;i<len;i++)
{stus=stu+i;
printf("给第 %d 的个学生信息初始化 :\n" ,i+1);
printf("请输入学生ID: ");
scanf("%d",&stus->stuID);




printf("请输入学生姓名: ");
scanf("%s",str);
printf("+++++++++++++%s",str);
strcpy(&(stus->name),str);
printf("请输入学生成绩  :");
scanf("%d",&stus->score);
}
puts("学生信息如下:");
for(i=0;i<len;i++)
{
printf("学生ID: %d\n学生姓名: %s\n学生成绩  :%d\n\n\n",(stu+i)->stuID,(stu+i)->name,(stu+i)->score);
}
}
return EXIT_SUCCESS;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值