首页 > 其他分享 >善于运用指针--通过指针引用数组

善于运用指针--通过指针引用数组

时间:2024-12-10 23:32:17浏览次数:5  
标签:arr -- 元素 int 数组 printf 指针

一个数组包含若干个元素,每个元素在内存中占用储存单元,它们都有相应的地址,指针变量能指向变量,也可以指向地址。所谓数组元素的地址,也就是数组元素的指针。

文章目录


前言

在C语言中,数组名代表数组首元素的地址,于是这两种写法是等价的


一、在引用数组元素时指针的运算

P+1指向同一数组中的下一个元素,P-1指向同一数组中的上一个元素,并不是简单的加一,而是+上一个数组元素的字节数。整型+4,double  占8个字节。

代码如下:

int main()
{
	int i = 0;
	int arr[5] = { 1,2,3,4,5 };
	int* p = arr;//数组名是首元素地址
	for (i = 0; i < 5; i++)
	{

		printf("%p\n", p + i);

	}
	return 0;
}

运行结果:

这里每个地址之间相差4,因为整型变量是4个字节。 


代码如下: 

int main()
{
	int i = 0;
	int arr[5] = { 1,2,3,4,5 };
	int* p = arr;//数组名是首元素的地址
	for (i = 0; i < 5; i++)
	{
		
		printf("%p--->%p\n", p+i,&arr[i]);
		
	}
	return 0;
}

运行结果: 

 

 指针加一,加的是一个元素所占空间的大小,元素名是首元素的地址。

p+i  = arr+i  =  &arr[i] 


二、通过指针引用数组元素


1.用指针打印数组

代码如下(示例):

int main()
{
	int i = 0;
	int arr[5] = { 1,2,3,4,5 };
	int* p = arr;//数组首元素地址
	for (i = 0; i < 5; i++)
	{

		printf("%d\n", *(p + i));
		//printf("%d\n", *(arr + i));
		//printf("%d\n", arr[i]);

	}
	return 0;
}

printf("%d\n", *(p + i));

printf("%d\n", *(arr + i));

printf("%d\n", arr[i]); 

都能打印数组元素,通过下标的方式最直观

通过p++也能打印 ,这种方法更简洁,高效


2.指针-指针

代码如下(示例):

int main()
{
	int i = 0;
	int arr[5] = { 1,2,3,4,5 };
	int* p1 = &arr[0];//数组首元素地址
	int* p2 = &arr[4];
	printf("%d\n", p2 - p1);
	return 0;
}

运行结果: 

如果指针p1和p2指向同一数组中的元素,那么p1-p2得到的是数组的元素个数


三、用数组名作函数参数

“*”是解引用操作符,对指针进行解引用操作,得到的是对应变量所占空间的内容(也就是它的值)

故:

*(p+i)  = *(arr+i)  =  *&arr[i] = arr[i] 得到的是数组的元素

 例:用指针对10个整数按由小到大排序

代码如下:

总结

(未完待续.....)

标签:arr,--,元素,int,数组,printf,指针
From: https://blog.csdn.net/2401_88850882/article/details/144314876

相关文章

  • 935. 骑士拨号器
    象棋骑士有一个独特的移动方式,它可以垂直移动两个方格,水平移动一个方格,或者水平移动两个方格,垂直移动一个方格(两者都形成一个 L 的形状)。象棋骑士可能的移动方式如下图所示:我们有一个象棋骑士和一个电话垫,如下所示,骑士只能站在一个数字单元格上(即蓝色单元格)。......
  • 架构11-虚拟化容器
    零、文章目录架构11-虚拟化容器1、从微服务到云原生(1)从微服务到云原生的演进**微服务:**上一个模块介绍了微服务中的关键技术问题与解决方案,这是架构师和程序员的本职工作。**云原生:**从微服务过渡到云原生,重点讨论不可变基础设施的概念及其重要性。(2)不可变基础设施概......
  • ThreeJs-06详解灯光与阴影
    一.gsap动画库1.1基本使用和原理首先直接npm安装然后导入比如让一个物体,x轴时间为5s旋转同理动画的速度曲线,可以在官网的文档找到1.2控制动画属性与方法当然这里面也有一些方法,动画完成,动画开始等一些属性也可实现停止动画随时,给到一个变量双击暂停以及恢复......
  • 架构12-容器间网络
    零、文章目录架构12-容器间网络1、Linux网络虚拟化(1)网络通信模型网络通信模型概述OSI七层模型和TCP/IP四层模型是理解网络通信的基础。Linux网络协议栈(简称“网络栈”)呈现“逐层调用,逐层封装”的特点,类似于栈结构。网络协议栈的各层应用层:程序通过Socket编......
  • 在Windows下为CodeBlocks20.3安装、配置wxWidget3.2.6
    0.前言CodeBlocks是使用C++编写程序的一个很好的开发环境,最大的好处是它是开源的、免费的,而不仅仅是因为它具有跨平台的能力。还有一个很重要的原因是在CodeBlocks中可以使用wxWidget,wxWidget也是开源的、免费的。尽管Qt和MFC也很优秀,QtCreator和VisualStudio都是很优秀的开发......
  • 基于springboot实现的古诗词系统源码
    项目简介基于springboot实现的古诗词系统,主要分为管理员和用户两种角色,管理员可以对古诗词类型,古诗词标签,古诗词作者,朝代,古诗文信息等基础数据进行管理,可以发布古诗文征文活动,可以查看用户参与活动上传的诗文内容,并且进行审核,审核通过的文章会进入到现代诗文栏目里面;普通会员......
  • 【数据库】E-R模型、函数依赖、范式
    2.东方货运公司数据库的样本数据如下。表名称:卡车车号货运站编号类型总行程购入日期1001  501  1 59002.7  11/06/20001002  502  2 54523.8  11/08/20001003  501  2 32116.6  09/29/20011004  502 ......
  • rk3568 适配 ft5436
    rk3568适配ft5436FT5436是一款由FTDI(FutureTechnologyDevicesInternational)公司生产的触摸屏控制器芯片。它通常用于触摸屏设备中,以支持触摸输入功能。T5436支持多点触控功能,可以同时识别多个触摸点,适合现代的触摸屏应用。该芯片通过I2C接口与主控微处理器进行通信,方便......
  • React-Weather-App
    (2024/12/0814:20--2024/12/0816:48) GitHub-hamza-mirza/react-weather-app:SourcecodeformyReactweatherapptutorial.https://www.youtube.com/watch?v=204C9yNeOYI......
  • Heart-代码实现(附完整代码)
    <!DOCTYPEhtml><html><head><style>body{background:#000;overflow:hidden;margin:0;}.matrix{position:fixed;top:0;left:0;width:100%;height:100%;z-index:-1;}/*中央图片爱心*/......