定义了两个函数print_stack()和print_malloc(),分别演示了两种不同的内存分配方式:栈内存和堆内存。然后在main()函数中调用这两个函数,并将它们返回的指针打印出来。
-  
由于
print_stack()中的数组c是在栈上分配的,当函数返回后,c所在的内存空间就会被释放,因此在main()函数中再次打印p时,会导致未定义的行为。 -  
而
print_malloc()函数中使用了动态内存分配函数malloc,在函数返回后,由于是在堆上分配的内存空间,因此在main()函数中再次打印p时,仍然能够正确输出来。 
代码展示:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 5
char* print_stack(){
    char c[100]="hello hasdhkjas";
    char *p;
    p=c;
    puts(p);
    return p;
}
char* print_malloc(){
    char *p;
    p=(char*)malloc(N);
    strcpy(p,"helloolleh");
    puts(p);
    return p;
}
int main(){
    char *p;
    p= print_stack();
    puts(p);
    p= print_malloc();
    puts(p);
    return 0;
} 
结果展示:




















