#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int 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 <stdio.h>
#include <stdlib.h>
#include <string.h>
char* 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