C语言——指针的使用和传址调用

C++ 指针调用 在这里,type 是指针的基类型,它必须是一个有效的 C++ 数据类型,var-name 是指针变量的名称。通过指针,可以简化一些 C++ 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。正如您所知道的,每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。中,您需要声明函数参数为指针类型,该函数用于交换参数所指向的两个整数变量的值。交换后,a 的值: 200。.. 阅读详情

一、指针的使用

1.1指针的简单使用

指针是一个存储变量内存地址的变量,它允许我们直接访问存储在该地址的数据。在C语言中,指针经常用于动态分配内存、传递函数参数、以及在函数之间传递地址等操作。

下面是一个使用指针的简单示例:

int main() 
{
    int num = 10; // 定义一个整型变量
    int *ptr; // 定义一个整型指针
    ptr = # // 将指针指向变量num的地址
    printf("num的值为:%d\n", *ptr); // 通过指针访问num的值
    return 0;
}

在上面这个例子中,指针ptr存储了变量num的地址,并通过对指针解引用*ptr,我们可以访问到num的值。

1.2库函数strlen的模拟实现

 库函数strlen是C语言标准库<string.h>中的一个函数,它的功能是求字符串长度,统计的是字符串中'\0'之前的字符的个数

参考代码如下:

#include<stdio.h>
#include<string.h>
//模拟实现库函数strlen

int StringLength(char* arr)
{
	int count = 0;
	
	while (*arr != '\0')
	{
		count++;
		arr++;
	}

	return count;
}

int main()
{
	 char arr[10000];
	 printf("请输入字符串:");
	 gets(arr);

	 int len = StringLength(arr);

	 printf("len = %d", len);

	return 0;
}

 二、指针的传址调用

当我们想要通过一个函数实现两个整型变量的交换,我们可能会写出如下代码:

#include<stdio.h>
//编写一个函数,实现两个整型变量的交换

void Swap1(int x, int y)
{
	int temp = 0;
	temp = x;
	x = y;
	y = temp;
}

int main()
{
	int a = 10;
	int b = 20;

	Swap1(a, b);

	printf("a = %d , b = %d\n", a, b);

	return 0;
}

程序运行后我们发现并没有实现想要的效果

a、b两个变量交换失败的原因是 :Swap1函数内部创建了形参x、y来接收a、b的值,但是x与a的地址、y与b的地址不同,在Swap1函数内部交换x、y的值自然不会影响到a、b。Swap1函数在使用的时候,是吧变量本身的值传给了函数,这种传参方式称为传值调用。实参传递给形参的时候,形参会单独创建一份临时空间来接收实参,对形参的修改不影响实参。

所以要想成功实现,我们就需要在调用函数的时候,函数内部操作的就是main中的变量,这就需要用到指针。

代码如下所示:

void Swap2(int* x, int* y)
{
	int temp = *x;
	*x = *y;
	*y = temp;
}

int main()
{
	int a = 10;
	int b = 20;

	//Swap1(a, b);
	Swap2(&a, &b);

	printf("a = %d , b = %d\n", a, b);

	return 0;
}

以上代码结果如下图所示: 

 Swap2成功实现了两个变量的交换。

这里调用Swap2函数的时候是将变量的地址传递给了函数,这种函数调用方式叫:传址调用。

传址调用,可以让函数和主调函数之间建立真正的联系,在函数内部就能实现修改主调函数中的变量。

更多C语言相关练习请访问:test_c: C语言练习,包括常见语法练习以及小项目练习。 (gitee.com)

用STM32H7的FMC+AD7606搭建多通道数据采集系统:两种工作模式(查询与FIFO中断)的代码详解与性能对比 本文详细解析了基于STM32H7微控制器和AD7606 ADC芯片的多通道数据采集系统设计,重点对比了查询模式与FIFO中断模式的实现方法与性能差异。通过FMC总线实现高速并行数据采集,系统支持16bit同步采样,最高可达200Ksps/通道。文章提供了完整的代码实现和优化策略,帮助工程师在工业监测等实时性要求高的场景中构建可靠的数据采集方案。 阅读详情

相关推荐

元数据及数据仓库相关概念

文章目录元数据(metadata)的概念Data about Data定义技术元数据业务元数据总结数据仓库ODS简单的理解为 Operational Data Store, 运营数据仓储 数据整合层(也叫做数据缓冲层)EDW简单理解为 Enterprise Data Warehouse, 企业数据仓库ODS与EDW之间的差异使用角色数据来源数据获取性能和及时性数据架构数据共享能力数据系统提供应用数...

frone的专栏 3137

C语言函数——指针调用

【代码】C语言函数——指针调用。

weixin_53355677的博客 1308

WebUI自动化测试框架搭建(python+pytest+selenium+allure)

将鼠标移动到要定位的元素上面>右键>点击“检查”>在元素代码上右键>复制>复制XPath。

m0_63729339的博客 1281

C语言指针的使用

指针是C语言中比较难懂的部分,但是指针又是C语言的精华,所以指针是每个C语言开发人员都必须掌握的知识。在学指针之前先来了解变量在内存中的分布。 在上图中,定义了3个变量a、b、c,这三个变量的地址分别是0x2000,0x2004和0x2008,变量的地址就代表这个变量所在的内存位置。举个例子,在一家酒店里有三个房间,门牌号分别是0x2000,0x2004,0x2008,这里的门牌号就相当是地址,找到相应的门牌号就能找到相应的房间。那么旅客根据什么东西可以找到相应的房间呢,答案是钥匙,一把钥匙对应一个房间门

hwx1546的博客 7360

信贷审批中的那些坑:从零开始搭建风控策略体系的5个关键步骤

本文深入探讨了信贷审批中的风控策略体系搭建,从数据陷阱识别、规则冲突诊断到反欺诈攻防,提供了5个关键步骤的实战指南。重点解析了如何通过特征工程、决策树优化和模型可解释性技术,构建动态平衡的风控体系,有效降低逾期风险并提升审批效率。

weixin_29253711的博客 411

一口气看完TransformerXL详细解释带代码一:相对位置编码

相对位置编码(Relative Position Encoding)是Transformer模型中用于捕捉序列元素间相对位置关系的一种方法,与绝对位置编码(如BERT中的固定位置嵌入)不同,它直接建模元素之间的相对距离,从而更灵活地处理长序列或不同长度的序列。1. 为什么需要相对位置编码?​。

m0_73426548的博客 1426

函数

函数的声明告诉编译器函数的名称、返回类型和参数;函数的定义提供了函数的实际主体。eg:函数strcat()用于连接两个字符串,函数memcpy()用于复制内存到另一个位置。定义函数C++ 中的函数定义的一般形式如下:return_type function_name( parameter list ) { body of the function }*返回类型:一个函数可以返回一个值。retu

NitefullSand 605

RandLA-Net复现SemanticKITTI和S3DIS数据集

RandLA-Net复现KITTI和室内数据集

weixin_48845174的博客 4109

C语言指针操作(六)指向函数的指针

指向函数的指针详解,以及如何使用指向函数的指针变量做函数参数。指向函数的指针作为函数参数,是 C 语言实际应用中的一个比较深入的部分。

伯努利 9689

Python实战:超分辨率图像质量评估全攻略——PSNR、SSIM、LPIPS与NIQE的代码实现与优化

本文详细介绍了在Python中实现超分辨率图像质量评估的完整方案,涵盖PSNR、SSIM、LPIPS和NIQE四大核心指标。通过模块化代码设计、多进程并行处理和GPU加速优化,帮助开发者构建高效、可扩展的评估系统,并提供了实战避坑指南与结果解读方法。

weixin_29053073的博客 472

Vue3 - 超详细最新 wangEditor V5 富文本编辑器安装引入及使用教程,提供工具栏配置、基础富文本功能、API使用示例教程等(新手小白快速引入并植入到项目中)

vue3,wangEditorv5富文本编辑器,wangEditorv5官方文档,vue3最新安装wangEditorv5富文本详细使用教程,vue3使用wangEditorv5编辑器示例代码,vue3网站网页安装植入富文本编辑器教程,vue3wangEditor使用api,vue3安装富文本控制台出现报错如何解决,vue3wangEditor-v5工具栏配置,vue3中使用富文本编译器wangEditor5的方法,wangeditor5在vue3中的全使用过程,vue3超详细最新wangedi

🏆 前端领域优质创作者 4253

c语言--指针的传值调用和传址调用

学习指针的目的是使用指针解决问题,那什么问题,非指针不可呢?传址调用,可以让函数和主调函数之间建立真正的联系,在函数内部可以修改主调函数中的变量;所以未来函数中只是需要主调函数中的变量值来实现计算,就可以采用传值调用。如果函数内部要修改主调函数中的变量的值,就需要传址调用。

2302_81090306的博客 1803

基于高斯两步移动搜寻法(2SFCA)的城市绿地可达性分析

第二步,对于每一个街道i,给定空间距离阈值d0,便形成另一个空间作用域,同样对于落在空间作用域内的每块绿地l的供给比率(Rl)利用高斯方程赋以权重,然后对这些加权后的供给比率(Rl)进行加和,便得到每个街道i的绿地可达性Ai。图3与图4是高斯两步移动搜索法的示例。在图3中,以d0为阈值,有1、2、3 三个街道中心点落在了绿地a的空间作用域内。同样在图4中,以d0为阈值,有a、c两个绿地中心点落在了街道2的空间作用域内,根据公式(3),对a、c高斯方程加权后的供需比率进行累加,便得到了街道2 的绿地可达性。

2301_77310370的博客 2404

C语言指针深入详解(二):const修饰指针、野指针、assert断言、指针的使用和传址调用

C语言指针深入详解(一):内存和地址、指针变量和地址、指针变量类型的意义、指针运算。

艾莉丝努力练剑的博客,感谢大家一直以来的对艾莉丝的支持和鼓励,uu们如果对C/C++方向感兴趣的话,可以通过艾莉丝主页的微信名片加艾莉丝的好友,和努力练剑的艾莉丝一起加油! 1506

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【C语言指针超详解(二)】--const修饰指针变量,野指针的辩析,assert断言,指针的使用和传址调用

往期回顾:

会当凌绝顶,一览众山小 2021

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

数据结构 study 1 -- C语言 传值 调用与 传址 调用 和 指针变量

C语言 传值 调用与 传址 调用 int x = 1, y = 2; swap(x, y); void swap(int a, int b) { … } 外部变量,x,y 的值 赋值给 swap 内部的局部变量 a和b。 如果 x,y的类型是 int ,那么就是把 x,y的值赋值给a和b 如果 x,y的类型是 int *, 那么就是把 x,y指向的地址赋值给 局部变量a和b了。 如果在函数内部,把 a 和 b的地址变化了,不会影响函数外部的x和y。 1:传值调用。 传值调用顾名思义就是将参数的值传递给函数,

abc 538

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C语言初学者—了解并掌握野指针,指针传值和传址调用

在。

Dawn_5000的博客 765

【C语言指针专题(3)】指针的简单使用(野指针、assert断言、传值调用和传址调用)

assert.h 头文件定义了宏 assert() ,⽤于在运⾏时确保程序符合指定条件,如果不符合,就报错终止运行。这个宏常常被称为“断言”。assert(p!= NULL);上面代码在程序运行到这一行语句时,会验证变量 p 是否等于 NULL。如果确实不等于 NULL,程序继续运行,否则就会终止运行,并且给出报错信息提示。我们知道在函数调用时需要传递参数。传值调用:直接把变量本身传递给函数。传址调用:把变量所在的地址传递给函数。//演示3.1.1int main()int a = 0;

jk23728的博客 1869

C语言学习NO.9-指针(一)内存和地址,指针变量和地址,指针变类型的意义,const修饰指针,指针运算,野指针,assret断言,指针的使用和传址调用

指针是什么?指针理解的2个要点:1.指针是内存中一个最小单元的编号,也就是地址;2.平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量。。

Z1125994的博客 1156

C语言学习NO.9-指针(一)内存和地址,指针变量,指针变类型的意义,const修饰指针,指针运算,野指针,assret断言,指针的使用和传址调用

称为“直接访问”。如**printf(“%d”,i);

Z1125994的博客 1099

09.【C语言学习笔记】指针(一)(内存和地址、&、*操作符、void*、const修饰、指针运算、野指针、assert断言、指针传址调用)

C语言1.内存和地址的关系,指针==地址;2.指针变量=>存放地址的变量,取地址操作符&和解引用*操作符的使用,指针变量的大小和操作系统32、64位有关;3.指针变量类型的意义,+-整数,void*指针的用处;4.const修饰指针(在*前/后);5.指针运算(+-整数、指针-指针);6.野指针;7.assert断言(可以#define NDEBUG直接取消所有断言);8.指针传址调用;

恢弘志士之气,不宜妄自菲薄 1243

c语言中srtlen(指针使用计算字符长度)、传值和传址调用

/ //总结,在进行传值调用时,形参只是实参的临时数值,形参会单独创建⼀份临时空间来接收实参,对形参的修改不影响实参。// printf("交换后 a = %d,b = %d\n", a, b);}//总结:传址调⽤,可以让函数和主调函数之间建⽴真正的联系,在函数内部可以修改主调函数中的变量;// printf("交换前 a = %d,b = %d\n", a, b);//size_t my_strlen(const char* p)//限制动*p。//指针的使⽤和传址调⽤。

x13870285957的博客 291

【C语言指针二】从入门到通透:核心知识点全梳理(野指针,assert断言,指针的使用和传址调用,数组名的理解和使用指针反访问数组)

本文介绍了C语言指针相关的重要知识点,包括野指针的产生原因及防范措施、assert断言的使用方法、指针的传址调用特性,以及数组名的本质理解。重点讲解了如何避免野指针、assert在调试中的作用、通过指针实现变量交换,并指出数组名本质是首元素地址的例外情况(sizeof运算符)。这些内容对深入掌握指针编程至关重要,能有效提升代码安全性和调试效率。

2501_93623544的博客 1200

c语言三维数组指针怎么传址调用,【C】 34_多维数组和多维指针

指向指针的指针指针的本质是变量指针会占用一定的内存空间可以定义指针的指针来保存指针变量的地址void code(){int i = 0;int* p = NULL;int** pp = NULL;pp = &p;*pp = &i;return 0;}问题为什么需要指向指针的指针指针在本质上也是变量对于指针也同样存在传值调用与传址调用实例分析: 重置动态空间大小#include #i...

weixin_39887961的博客 573

11.4C语言指针 指针初使用和传址调用,模拟库函数实现strlen

❗那是因为形参只是实参的拷贝,两者处在不同空间,就算传值到函数里面实现了值的交换,那也只是形参自己的交换,不影响实参,实参并没有真正交换。在11.2C语言指针章中学习指针变量类型意义后,我们尝试利用一下指针解决一些问题。🌏结论:传a和b的地址过去,实则Swap函数。❓那为什么不是直接将a值和b值传过去给实参呢。写一个函数,实现两个整型变量值交换。🌙先看例子,用循环方法打印数组。

MONICA_CZT的博客 252

c语言三维数组指针怎么传址调用,C之多维数组和多维指针(三十一)

我们在之前讲到过指针的本质是变量,当然指针也就会占用一定的内存空间。我们便可以定义指针的指针来保存指针变量的地址值啦,这便是我们所说的二维指针啦。那么为什么需要指向指针的指针呢?指针的本质便是变量,对于指针也同样存在传值调用和传址调用。我们来看看一个示例代码,代码如下#include#includeintreset(char**p,intsize,intnew_size){intr...

weixin_42715608的博客 968
上一篇: assert的使用
下一篇: C语言——对数组名的理解
Jett_Lin
博客等级 码龄5年 305粉丝 36原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值