14-函数返回指针
一、笔记:
任何时候执行的函数,都是栈顶的函数。
作用:
如果我们在堆上有一个内存地址,或者在全局区有一个变量,那么我们就可以安全的返回他们的地址。
因此堆上分配的内存需要显示释放,我们控制它们的释放。
全局区的任何东西,生命周期是整个程序的执行时间。
我们可以使用malloc或者C++中使用new操作符来获取堆上的内存。
从函数返回指针的时候,小心它们的作用范围。必须保证地址没有被重用(用来存储其他东西),那个地址的数据没有被清除。
Int c = (*a) +(*b); 这里的a和b在add中是指针变量,整形的指针变量。类型不一样。
静态变量和全局变量的存储方式一样。
&a:指针变量的地址;
(add栈帧中a的地址,a是指向main函数中a的指针,所以内容是main中a的地址,
*a是对指针解引用,所以是main中a的内容)
a:main中a的地址;
*a:main中a的值;
当我们想要一个Add函数的局部变量给main函数,当被调函数结束控制返回主调函数的时候,那块内存已经被释放了。
从栈底向上传一个局部变量或一个局部变量的地址是可以的。从栈顶向下传是不可以的。
二、代码:
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h> // 包含字符串处理函数库
#include <math.h>
#include <time.h>
void PrintHelloWorld() {
printf("Hello World\n");
}
int* Add(int* a, int* b) {
int* c = (int*)malloc(sizeof(int));
*c = (*a) + (*b);
return c;
}
int main()
{
int a = 2, b = 4;
int* ptr = Add(&a, &b);
PrintHelloWorld();
printf("Sum = %d\n", *ptr);
}