c语言函数返回值的几种方式,入参方式回传数据

news2024/11/22 18:06:13

背景

在正常使用过程中,突然发现有用二级指针传递地址,我想没必要用二级指针,实际目的是函数入参的参数,也是函数出参的参数

作为参数传入func
退出func
指针初始化为空
func内申请内存
已申请到内存继续使用

例子

函数正常返回值方式

正常的都是使用返回值的方式

int func(void)
{
	return 10;//这个就是返回的值
}
int main(int argc, char *argv[])
{
	int val = func();//val = 10
	return 0;
}

地址方式传入

void func(int address)
{
	*(int*)address = 10;//地址作为参数传入,强制转换为指针,指针上的值改变为10
}
int main(int argc, char *argv[])
{
	int val = 100;
	func(&val);//val = 10
	return 0;
}

这里默认地址长度为 int 大小,这里是传入地址,func 对地址值 上的数据改变,退出函数后地址值上的数据已经被改变。

指针方式传入

char tmp[] = "12345679";
void func(void* address)
{
	*(char*)address = tmp;//address是val的地址,强制转换对地址上值操作,就是改变val地址上的值,就是val
}
int main(int argc, char *argv[])
{
	char* val = NULL;//指针初始化为NULL,实际是val=NULL,val的地址是固定值
	func(&val);//应传入val的地址
//	func(val);//这个是错误的,因为val是NULL
	return 0;
}

这里具体应用是传入地址,func可以申请内存,可以操作内容

二级指针

char tmp[] = "12345679";
void func(void** address)
{
	*address = tmp;//address是val的地址,对地址上值操作,就是改变val地址上的值,就是val
}
int main(int argc, char *argv[])
{
	char* val = NULL;//指针初始化为NULL,实际是val=NULL,val的地址是固定值
	func(&val);//应传入val的地址
//	func(val);//这个是错误的,因为val是NULL
	return 0;
}

实际上和上面效果一样,我认为此时这样使用就没必要了,二级指针没发挥作用。

入参的值

void func1(void* address);
void func2(void** address);
void func3(void*** address);
int main(int argc, char *argv[])
{
	char* val = NULL;
	func1(&val);
	func2(&val);
	func3(&val);
	return 0;
}

以上,实际上 三个func的入参 address 都是 &val ,是 val 的地址
在这里插入图片描述
对应关系如图,这样就清晰多了

后记

我觉得二级指针不好,看各个人的所爱了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/597278.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

火山引擎A/B测试:MAB智能调优实验,企业活动效果提升新利器

618临近,各大电商APP的预热活动已然拉开序幕。对企业而言,一场活动从策划到上线,中间经过效果验证,其业务成本很高。一个好的活动创意从策划、开发、到最终发布,至少会经历几周实践,如果中间还经历A/B实验的…

三肽-33/Preventhelia(Diaminopropionoyl Tripeptide-33)

紫外线是一种电磁波,波长小于可见光,大部分地球表面的紫外线来自太阳,紫外线是伤害性光线的一种,经由皮肤吸收,会破坏DNA,使细胞会死亡或凋零从而产生皱纹、晒伤、等一系列不良反应。 作用机理---- Preven…

深入理解设计原则之依赖反转原则(DIP)

系列文章目录 C高性能优化编程系列 深入理解设计原则系列 深入理解设计模式系列 高级C并发线程编程 DIP:依赖反转原则 系列文章目录1、依赖反转原则的定义和解读2、稳定的抽象层3、依赖倒置原则和控制反转、依赖注入的联系小结 1、依赖反转原则的定义和解读 SOIL…

Linux零拷贝

零拷贝(Zero-copy)是一种优化技术,用于减少数据在内核空间和用户空间之间的拷贝次数,提高数据传输的效率和性能。它通过最小化数据的复制操作,将数据直接从源位置传输到目标位置,而不需要额外的数据拷贝。 …

微信小程序 构建npm报错: 没有找到可以构建的 NPM 包,请确认需要参与构建的 npm 都在 `miniprogramRoot` 目录内,

构建npm时报错 几个解决方案: 1、没有初始化项目 可以看这篇博客:微信小程序构建npm(js和ts 2、ts版本下记得修改删除project.config.json中setting字段下的一些内容 需要加或修改 "packNpmManually": true, "packNpmRe…

短视频矩阵系统软件源码---技术部署创建

矩阵系统源码主要有三种框架:Spring、Struts和Hibernate。Spring框架是一个全栈式的Java应用程序开发框架,提供了IOC容器、AOP、事务管理等功能。Struts框架是一个MVC架构的Web应用程序框架,用于将数据模型、Web应用程序的用户界面和控制器逻…

实战助力未来|“饶派杯”XCTF车联网安全挑战赛圆满收官!

2023年5月31日,“饶派杯”XCTF车联网安全挑战赛于江西省上饶市圆满落幕。本次大赛由江西省委网信办、江西省工信厅、上饶市人民政府主办,旨在深入贯彻落实国家网络强国和交通强国战略部署,推动智能网联汽车技术与产业发展、加快该领域人才培养…

【Linux】基于环形队列的生产者消费者模型

文章目录 基于环形队列的生产消费模型生产者和消费者的关注点申请和释放资源的问题规则 RingQueue.hpp单生产者单消费者的生产者消费者模型:信号量保护环形队列的原理多生产者多消费者模型计算任务处理RingQueue.hppTask.hppRingQueue.cc 基于环形队列的生产消费模型 环形队列…

安装pytourch gpu并测试

输入nvidia-smi命令查看cuda版本号, 系统的CUDA版本决定了系统最高可以支持什么版本的cudatoolkit,它是向下兼容的, 可以装低版本但是不能装高版本。 更新下conda,用管理员打开cmd conda update -n base -c defaults conda 安装CUDATookit 使用以下命令…

8 指数族分布【手写+Xmind笔记】

文章目录 8 指数族分布【手写Xmind笔记】8.1 Xmind笔记8.2 手写证明 8 指数族分布【手写Xmind笔记】 8.1 Xmind笔记 8.2 手写证明

第十二篇、基于Arduino uno,获取多个按键的输入信号(滤波消抖)——结果导向

0、结果 说明:先来看看串口调试助手显示的结果,当按下按键的时候,按一次会打印一次按键被按下,并且打印是哪个按键被按下。如果是你想要的,可以接着往下看。 1、外观 说明:虽然每个型号的按键形态各异&a…

Linux---用户的权限

专栏:Linux 个人主页:HaiFan. 本章为大家带来用户的权限的讲解 用户的权限 Linux权限的概念权限的三类对象权限的三种类型权限设置chmod/chown/chgrp更改权限chmodchownchgrp umask目录的权限粘滞位 Linux权限的概念 Linux下有两种用户:超级…

安科瑞应急照明的环境适用性

安科瑞 徐浩竣 江苏安科瑞电器制造有限公司 zx acrelxhj 摘要:论述消防应急照明和疏散指示系统在实际工程应用过程中系统产品选型、设置及维护环节普遍存在的问题,并提出相应的解决对策。 关键词:应急照明疏散指示产品选型环境适用性灯具…

机器学习笔记 - 使用稳定扩散模型创建图像

一、简述 文本到图像生成是机器学习 (ML) 模型从文本描述生成图像的任务。目标是生成与描述非常匹配的图像,捕捉文本的细节和细微差别。这项任务具有挑战性,因为它要求模型理解文本的语义和语法,并生成逼真的图像。文本到图像生成在 AI 摄影、概念艺术、建筑建筑、时尚、视…

用JMeter自动化测试实现高效稳定的接口测试方案!

目录 前言: 1. 接口与接口测试 1.1 接口概述 1.2 接口测试 2. 基于JMeter的接口测试 2.1 JMeter概述 2.2 用JMeter实现接口测试 3. 基于JMeter的接口自动化测试 3.1 接口自动化测试基础 3.2 使用JMeter进行接口自动化测试 总结 前言: 接口是…

(字符串) 541. 反转字符串 II——【Leetcode每日一题】

❓541. 反转字符串 II 难度:简单 给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。 如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大…

【dns awsl】RedHat8配置DNS服务器

文章目录 一、安装 配置DNS验证 一、安装 配置DNS 安装 sudo dnf install bind bind-utils配置named.conf 指定正向解析和反向解析的所需文件 vim /etc/named.conf在文件中找到options部分,并进行如下修改:options {listen-on port 53 { any; };allow…

day02——特征工程之特征提取

特征工程之特征提取 一、什么是特征工程二、特征提取1,字典特征提取2,文本特征提取(1)英文文本特征提取(2)中文文本特征提取(3)Tf-idf 文本特征提取 一、什么是特征工程 特征工程是…

CRM和SCRM有什么区别?

首先讲下CRM是什么?光是概念就有7个之多: 提出者概念GartnerGroupCRM是一种商业策略,它按照客户的分类情况有效地组织企业资源,培养以客户为中心的经营行为以及实施以客户为中心的业务流程,并以此为手段来提高企业的赢…

低代码平台安全性探究:解析低代码平台的安全性及应对措施

近年来,低代码平台由于能够以最少的代码快速开发应用程序而变得越来越流行。然而,随着数据泄露和网络威胁的增加,企业有理由质疑低码平台是否安全。在本文中,我们将探讨低代码平台安全吗? 一、低码平台如何工作。 在我…