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