C语言指针与malloc动态内存申请,栈与堆的差异-创新互联

#include#include#includeint main() {int size;//size 代表我们要申请多大字节的空间
    char *p;//void*类型的指针不能偏移的,因此不会定义无类型的指针
    scanf("%d",&size);//输入要申请的空间大小
    //malloc返回的void*代表无类型的指针
    p=(char*)malloc(size);
    strcpy(p,"malloc success");
    puts(p);
    free(p);//释放申请的空间时,给的地址必须是最初的malloc返回给我们的地址
    return 0;
}
char* print_stack(){char c[100]="I am print_stack func";
    char *p;
    p=c;
    puts(p);
    return p;
}


int main() {char *p;
    p=print_stack();  // 该函数执行完之后栈空间会释放,释放的空间给后者使用 导致乱码
    puts(p);
//    p=print_malloc();
    puts(p);          // p接受的是数组的起始地址
    free(p);//只有free时,堆空间仓会释放
    return 0;
}


结果
I am print_stack func
I am print_stack??
#include#include#includechar* print_stack(){char c[100]="I am print_stack func";
    char *p;
    p=c;
    puts(p);
    return p;
}

char *print_malloc(){char *p=(char*) malloc(100); //堆空间在整个进程中一直有效,不因为函数结束而消亡
    strcpy(p,"I am print malloc func");
    puts(p);
    return p;
}


int main() {char *p;
    p=print_stack();
    puts(p);
    p=print_malloc();
    puts(p);
    free(p);//只有free时,堆空间仓会释放
    return 0;
}



I am print_stack func
I am print_stack??
I am print malloc func
I am print malloc func

在这里插入图片描述

创新互联公司主营临淄网站建设的网络公司,主营网站建设方案,成都app软件开发公司,临淄h5微信小程序定制开发搭建,临淄网站营销推广欢迎临淄等地区企业咨询

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


文章标题:C语言指针与malloc动态内存申请,栈与堆的差异-创新互联
文章出自:http://pwwzsj.com/article/hoisg.html