美文网首页
2020-11-01

2020-11-01

作者: 恰我年少时 | 来源:发表于2020-11-01 11:32 被阅读0次

    include <stdio.h>

    include "stdlib.h"

    //malloc(memory alloc)
    //malloc(size:字节)返回地址,用指针存下分配的地址
    //void * any_pointer,当要使用时,必须明确告诉这篇内存要存什么类型
    //为什么呢?
    //因为要明确定位访问位置
    //int * pTemp = (int )malloc(1sizeof(int))强制类型转换
    //限制的放缓存-在内存和缓存之间转移
    /**

    • if(pTemp!=NULL)说明成功{
      *pTemp=10;
      pTemp[0]=10;
      }
    • if(pTemp==NULL){
    • exit(EXIT_FAILURE);
    • }
      /
      /
      *realloc:
    • int * pRtmp = (int )realloc(pTemp,2sizeof(int))
    • 地址一定要通过malloc分配
    • realloc(地址,大小(总大小而不是新分配的大小))之前的内存realloc会自动释放
    • 1.重新分配一片能够容纳的内存空间
    • 2.将之前的内容复制到新空间中
    • 3.原来的内存空间释放
    • 4.返回新的地址
    • 5.无论malloc还是realloc,都要判断是否失败,
    • if(pRtemp == NULL){
    • free(pTemp);}
    • pTemp=pRtemp;
      /
      /
      * free(pTemp)

    */
    //realloc
    //free
    int main() {
    //今天做动态分配
    //用malloc和realloc
    //用free释放内存
    //需要定义字符指针变量 保存分配的内存空间 -> 保存字符串
    char * psentence=NULL;
    int index=0;
    while(1){
    //如果是第一次要用malloc,之后用realloc
    //要用一个数保存长度
    //1.在后面加\0 2.方便操作
    char ch=getchar();
    if(ch=='\n')break;
    if(index==0){psentence=(char )malloc(1sizeof(char));
    psentence[index]=ch;}

        else{char *pTemp = realloc(psentence,(index+1)*sizeof(char));
        pTemp[index]=ch;}
        index++;
    }
    char * ptemp=realloc(psentence,(index+1)*sizeof(char));
    if(ptemp==NULL){
        free(psentence);
        exit(EXIT_FAILURE);
    }
    psentence=ptemp;
    psentence[index]='\0';
    
    printf("%s",psentence);
    printf("程序结束\n");
    return 0;
    

    }

    相关文章

      网友评论

          本文标题:2020-11-01

          本文链接:https://www.haomeiwen.com/subject/xlmyvktx.html