一趟走完,两边各剩下什么
这趟走完,谁被收走,谁还留着
跟着走
留下来
(本条路线统一用 gcc -std=c11 -O0 编译)一个函数把值带回来,另一个把地址带回来:
#include <stdio.h>
#include <stdlib.h>
/* 栈上的那份:函数一返回就没了,所以只能把值带回来 */
int on_stack(void) {
int x = 7;
return x;
}
/* 堆上的那份:函数返回了它还在,所以能把地址带回来 */
int *on_heap(void) {
int *p = malloc(sizeof(int));
*p = 7;
return p;
}
int main(void) {
int a = on_stack();
int *b = on_heap();
printf("%d/%d/%d\n", a, *b, a == *b);
free(b);
return 0;
}
全部评论