C语言---指针进阶

1.字符指针

int main()
{
	char str1[] = "hello world";
	char str2[] = "hello world";
	const char* str3 = "hello world.";
	const char* str4 = "hello world.";
	if (str3 == str4)
	{
		//常量字符串在内存里面是无法修改的,所以没必要存
		//2分,因为都无法改变
		printf("same\n");
	}
	else
	{
		printf("not same\n");
	}
	return 0;
}

(1)这里面的str3和str4就是字符指针,简而言之,字符指针就是存放字符的指针;

(2)字符指针变量指向的是首个字符的地址;

(3)上面的程序打印的结果就是same,因为加上const之后就是常量字符串,无法进行修改,所

以在内存里面不用存2份,因为反正也无法改变,所以他们的地址是相同的;

(4)str1和str2地址是不相同的,因为str1和str2是两个不同的数组,内存里面会分别给2个数组开

辟空间,所以他们的地址是一定不相同的;

2.指针数组

(1)这个先定义了3个数组,分别是arr1[],arr2[],arr3[],

(2)整形数组就是全是整数的数组,字符数组就是全是字符的数组,指针数组毫无疑问就是存放指针的数组,arr4就是一个指针数组,里面放着定义的三个数组的地址;

(3)这个是使用指针数组模拟实现二维数组,通过arr4[i]找到对应的数组的地址,

arr4[i][j]就是找到数组里面对应的元素的地址;如下图所示

3.数组指针

int (*p) arr4就是数组指针;

(1)数组名是数组首个元素的地址,但是有2个例外

------->一个是&(数组名),这里的数组名是整个数组,求的是这个数组的地址;

-------->另外一个是sizeof(数组名),这里的数组名是整个数组,求的是数组的大小,单位字节;

(2)通过一个例子带你走进数组指针

arr+1就是跳过一个元素,所以相差4C-48=4个字节;

&arr+1就是跳过一个数组,所以相差95C-948=20个字节;

虽然数组的地址和首个元素的地址指向的位置一样,但是他们的类型不一样;

我们引入数组指针就是为了存放数组的地址,数组指针是这样表示的;

4.数组指针的使用

(1)二维数组的传参实际上传递的是地址

void Print(int(*p)[5], int r, int c)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 5; j++)
		{
			printf("%d ", *(*(p + i) + j));
		}
		printf("\n");
	}
}
int main()
{
	int arr[3][5] = { 1,2,3,4,5,2,3,4,5,6,3,4,5,6,7 };
	Print(arr, 3, 5);
	return 0;
}

我们可以把一个二维数组理解成为3个一维数组组合而成的,第⼀⾏的⼀维数组的类型就是 int [5] ,所以第⼀⾏的地址的类 型就是数组指针类型 int(*)[5];

传参传递的是一维数组的地址;

由此可见:⼆维数组传参,形参的部分可以写成数组,也可以写成指针形式。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

“分布式透明化”在杭州银行核心系统上线之思考

导读 随着金融行业数字化转型的需求&#xff0c;银行核心系统的升级改造成为重要议题。杭州银行成功上线以 TiDB 为底层数据库的新一代核心业务系统&#xff0c;该实践采用应用与基础设施解耦、分布式透明化的设计开发理念&#xff0c;推动银行核心系统的整体升级。 本文聚焦…

【Effective Objective - C 2.0】——读书笔记(五)

文章目录 二十九、理解引用计数三十、以ARC简化引用计数三十一、在dealloc方法中只释放引用并解除监听三十二、编写异常安全代码时留意内存管理问题三十三、以弱引用避免保留环三十四、以”自动释放池块“降低内存峰值三十五、用"僵尸对象"调试内存管理问题三十六、不…

【C语言】实现队列

目录 &#xff08;一&#xff09;队列 &#xff08;二&#xff09;头文件 &#xff08;三&#xff09; 功能实现 &#xff08;1&#xff09;初始化 &#xff08;2&#xff09; 销毁队列 &#xff08;3&#xff09; 入队 &#xff08;4&#xff09;出队 &#xff08;5&a…

论文阅读:四足机器人对抗运动先验学习稳健和敏捷的行走

论文&#xff1a;Learning Robust and Agile Legged Locomotion Using Adversarial Motion Priors 进一步学习&#xff1a;AMP&#xff0c;baseline方法&#xff0c;TO 摘要&#xff1a; 介绍了一种新颖的系统&#xff0c;通过使用对抗性运动先验 (AMP) 使四足机器人在复杂地…

luigi,一个好用的 Python 数据管道库!

🏷️个人主页:鼠鼠我捏,要死了捏的主页 🏷️付费专栏:Python专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 前言 大家好,今天为大家分享一个超级厉害的 Python 库 - luigi。 Github地址:https://github.com/spotify/luigi 在大数据时代,处理海量数据已经成…

NVIDIA 刚刚揭秘了他们的最新大作——Eos,一台跻身全球十强的超级计算机

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

android获取sha1

1.cmd在控制台获取 切换到Android Studio\jre\bin目录下执行keytool -list -v -keystore 签名文件路径例如&#xff1a; 2.也可以在android studio中获取 在Terminal中输入命令&#xff1a;keytool -list -v -keystore 签名文件路径获取 获取到的sha1如下&#xff1a;

ubuntu屏幕小的解决办法

1. 安装vmware tools , 再点自适应客户机 执行里面的vmware-install.pl这个文件 &#xff1a;sudo ./vmware-install.pl 执行不了可以放到家目录&#xff0c;我放在了/home/book 里面 最后点这个自适应客户机 然后我这里点不了是因为我点了控制台视图和拉伸客户机&#xff0c…

ClickHouse--07--Integration 系列表引擎

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Integration 系列表引擎1 HDFS1.1 语法1.2 示例&#xff1a; 2 MySQL2.1 语法2.2 示例&#xff1a; 3 Kafka3.1 语法3.2 示例&#xff1a;3.3 数据持久化方法 Integ…

Leetcode 94.二叉树的中序遍历

题目 给定一个二叉树的根节点 root &#xff0c;返回 它的中序 遍历 。 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2] 进阶: 递归算法很简单&#xff0c;你可以通过迭代算法完成吗&#xff1f; 递归遍历 递归遍历就是一个很简单的中序遍历 /*** Definitio…

LEETCODE 69. x 的平方根

class Solution { public:int mySqrt(int x) {int left0;int rightx;int midleft(right-left)/2;int ans-1;while(left<right){midleft(right-left)/2;if((long long)mid*mid<x){ansmid;leftmid1;}else{rightmid-1;}}return ans;} };*(long long)

GPT SOVITS项目 一分钟克隆 (文字输出)

步骤流程&#xff1a;&#xff08;首先使用UVR 提取人声文件&#xff0c;然后按下面步骤进行&#xff09; 注意这里提交的音频是参考的音频

【简写MyBatis】01-简单映射器

前言 新开一个坑&#xff0c;为了学习一下MyBatis的源码&#xff0c;写代码是次要的&#xff0c;主要为了吸收一下其中的思想和手法。 目的 关联对象接口和映射类的问题&#xff0c;把 DAO 接口使用代理类&#xff0c;包装映射操作。 知识点 动态代理简单工厂模式Invocati…

Web APIs -05

js执行机制 js是单线程&#xff0c;同一个时间只能做一件事情&#xff0c;所有任务需要排队所以有时候会渲染不连贯 同步任务 都在主线程上执行&#xff0c;形成一个执行栈 异步任务 js的异步是通过回调函数实现的分为三类&#xff1a;1.普通事件&#xff1a;click等&…

课时31:内容格式化_输出格式化_printf格式化

1.1.3 printf格式化 学习目标 这一节&#xff0c;我们从 基础知识、简单实践、小结 三个方面来学习。 基础知识 场景需求 虽然我们能够通过 echo的方式实现信息某种程度的格式化输出&#xff0c;但是很多信息的输出偏重于手工的干预&#xff0c;效率太慢。我们需要一种功能…

“构建安全高效的前端权限控制系统:确保用户访问合适的内容“

✨✨ 欢迎大家来到喔的嘛呀的博客✨✨ &#x1f388;&#x1f388;希望这篇博客对大家能有帮助&#x1f388;&#x1f388; ✨✨ 一个正在努力的人&#xff0c;期待您的关注✨✨ 目录 引言 一、背景介绍 二 、具体实现方法 &#xff08;1&#xff09;用户角色管理 1. 安装依…

FL Studio21.2水果软件官方中文版网站

FL Studio 21&#xff0c;通常被称为“水果”音乐制作软件&#xff0c;是一款功能强大的数字音频工作站&#xff08;DAW&#xff09;。这款软件起源于“Fruity Loops”&#xff0c;最初的设计初衷是针对采样循环操作&#xff0c;自1998年发布以来&#xff0c;它已经从一款针对M…

Rust中不可变变量与const有何区别?

Rust作者认为变量默认应该是immutable&#xff0c;即声明后不能被改变的变量。这一点是让跨语言学习者觉得很别扭&#xff0c;不过这一点小的改变带来了诸多好处&#xff0c;本节我们来学习Rust的变量。 什么是变量&#xff1f; 如果你初次学习编程语言&#xff0c;变量会是一…

stm32:pwm output模块,记录一下我是用smt32,输出pwm波的记录--(实现--重要)

我是实现了输出pwm波&#xff0c;频率固定&#xff0c;占空比可以不断调整的方法&#xff0c;将PA0接到示波器上&#xff0c;可以看到是一个标准的PWM波&#xff0c;如图下面示波器图。 1&#xff0c;首先是ioc的配置 我刚开始设置的分频的倍数是7199&#xff0c;使得分频的太…

【项目实现】自主HTTP服务器

自主HTTP服务器 项目介绍网络协议栈介绍协议分层 数据的封装与分用数据的封装与分用 HTTP相关知识介绍HTTP的特点 URL格式URI、URL、URNHTTP的协议格式HTTP的请求方法HTTP的状态码HTTP常见的Header CGI机制介绍CGI机制的概念CGI机制的实现步骤CGI机制的意义 日志编写套接字相关…