当前位置: 首页 > article >正文

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);
}

http://www.kler.cn/news/331046.html

相关文章:

  • electron出现乱码和使用cmd出现乱码
  • 主流前端框架的详细对比和选择建议
  • express,MySQL 实现登录接口
  • 2024.9.28更换启辰R30汽车火花塞
  • 如何给一张图像判断失真类型?
  • vscode安装及c++配置编译
  • 【PostgreSQL】提高篇——深入了解不同类型的 JOIN(INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN)应用操作
  • GaussDB关键技术原理:高弹性(六)
  • 讲职场:不要经常说消极的话
  • SAP 批量修改角色权限
  • 关于Vben Admin多标签页面缓存不生效的问题
  • python入门/列表for循环解析/ [item*item for item in range(1,11)]
  • 【PostgreSQL】提高篇——公用表表达式(CTE)和窗口函数
  • 滚雪球学MySQL[9.2讲]:实战项目:电商系统的需求分析与数据库设计
  • 15分钟学 Python 第33天 :函数式编程简介
  • LeetCode从入门到超凡(五)深入浅出---位运算
  • 【Linux】磁盘分区挂载网络配置进程【更详细,带实操】
  • 学习Spring Boot,应该从哪里开始学起
  • Yolov8分类检测记录
  • PWM:控制信号的秘密武器