指针进阶1 2

news2025/2/3 1:12:23

在这里插入图片描述

字符指针

int main()
{
	char ch = 'q';
	char* pa = &ch;

	return 0;
}

不仅可以这样写还可以指向一个字符串

int main()
{
	/*char ch = 'q';
	char* pa = &ch;*/

	char* ph = "hello world";
	printf("%c\n", *ph);//打印遇到\0才会结束,没数据会打印随机值
	//这个实际上是取的首字符地址存储在ph

	char arr[] = "hello world";
	//跟数组不同 数组确实放的是整个字符


	printf("%s\n", ph);//%s打印字符串.打印遇到\0才会结束,没数据会打印随机值.只需要起始字符  可以打印出所有
	printf("%s\n",arr );


		

	return 0;
}

在这里插入图片描述
数组名表示首元素地址啊 第一个肯定表示的是两个数组首元素地址是否相同

2个数组在2个不同空间,数组名代表首元素的地址,位置不同,地址就不一样

在这里插入图片描述
内存里两块不同的孔吉纳 所以不能更改


arr3 arr3都不能改 所以在内存中共用一份 以下解答

int main()
{


	char* ph = "hello world";//“hello world”常量字符串
	

	char arr[] = "hello world";
	
	*ph = 'w';//代码报错 不能更改 因为是常量
	arr[0] = 'w';

	return 0;
}

指针数组 (指针数组是存放地址的数组)

在这里插入图片描述

int main()
{
	//指针数组
	//数组-数组中存放的是指针 

	/*int* arr[3];*///存放整形指针的数组
	//用途如下


	int a[5] = { 1,2,3,4,5 };
	int b[] = { 2,3,4,5,6 };
	int c[] = { 3,4,5,6,7 };
	int* arr[3]={a,b,c};
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		int j = 0;
		for (j = 0; j < 5; j++)
		{
			//printf("%d ", *(arr[i] + j));
			printf("%d ", arr[i][j]);//同上
		}
		printf("\n");
	}





	return 0;
}//i行j列。其实相当于i 一共有三行,i是每一行首元素地址j

数组指针

数组指针 是指向数组的指针
整形指针 是指向整形的指针
字符指针 是指向字符的指针

在这里插入图片描述

int main()
{
	int a = 10;
	int* pa = &a;
	char ch = 'w';
	char* pc = &ch;

	int arr[10] = { 1,2,3,4,5 };
	int(*parr)[10] = &arr;//取出的是数组的地址
	//parr 就是一个数组指针 -其中存放的是数组地址



	double* d[5];
	double* (*pd)[5] = &d;




	//arr数组名就是数组首元素的地址 arr[0]地址

	return 0;
}

数组名和&数组名

在这里插入图片描述

int main()
{
	int arr[10] = { 0 };
	int* p1 = arr;//整形指针+1跳过4个字节
	int(*p2)[10] = &arr;//数组指针  加一 跳过1个数组 m每个数组是整形10个元素
	
	printf("%p\n", p1);
	printf("%p\n", p1+1);


	printf("%p\n", p2);//打印结果一样  但是类型不同 意义不同。 &arr存起来需要数组指针
	printf("%p\n", p2+1);

	//两个地址都加1 一个到下一个元素 另一个跳过整个数组
	//+4和 + 40,这里加的是字节数。0x28是40,不要只是看表面上的数
	return 0;
}

在这里插入图片描述

数组

数组名是数组首元素的地址
但是有两个例外:
1.sizeof(数组名)-数组名表示整个数组,计算的整个数组大小,单位是字节。
2&数组名-数组名表示整个数组 取出的是整个数组的地址

数组指针的使用

在这里插入图片描述
以上通常不会用到, 接下来写另一种方法

void print1(int arr[3][5], int r, int c)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < r; i++)
	{

		for (j = 0; j < c; j++)
		{
			printf("%d", arr[i][j]);
		}
		printf("\n");
	}


}
void print2(int(*p)[5], int r, int c)//r行  c列  
{

	int i = 0;
	int j = 0;
	for (i = 0; i < r; i++)
	{

		for (j = 0; j < c; j++)
		{
			printf("%d", *( * (p + i) + j));//*(*(p+i)+j)就是某一行某一个元素
		}
		printf("\n");
	}


}//p + i是第 i 行的意思p + i直接跳行 *找到某一行数组名



int main()
{
	int arr[3][5] = { {1,2,3,4,5 },{ 2, 3, 4, 5, 6},{ 3, 4, 5, 6, 7} };
	print1(arr, 3, 5);
	print2(arr, 3, 5);//arr数组名表示数组首元素地址  二维数组首元素是第一行。int a[5]相当于这样。&a
	//第一行的地址是一个数组指针


	return 0;
 }

回顾下以下代码

在这里插入图片描述

在这里插入图片描述

parr3是一个存放数组指针的数组,可以存放10个指针每个指针指向一个数组 数组是5元素的数组 每个元素是int
parr3[]是一个数组 每个元素是个数组指针

就是一个数组指针指向五个数组元素

数组参数和指针参数

在这里插入图片描述

第三个 int的地址整形的地址放到整形里,所以这题没问题。 这里有点坑,只要把arr当成一个普通的变量就行了,比如你传一个数组,你可以定义一个指针去接收,这个arr就是那个指针

test2数组传参写成数组所以没问题

test22
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述

第4 拿那这个只能传过去二维数组的第一行
第5 不能用存放整形指针的数组接收

最后一个 要传的不是指针,所以二级指针不对

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

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

相关文章

pybind11学习 | VS2022下安装配置

pybind11是一个只有头文件&#xff08;header-only&#xff09;的轻量级库&#xff0c;其主要目的是建立C的Python代码绑定&#xff0c;实现C和Python无缝连接。我学习这个工具的目的&#xff0c;是为了能够在Python中调用C代码实现一些计算密集型任务&#xff0c;同时培养自己…

Java后端核心技能知识点

今天带来的是2022全新升级的《Java岗面试核心版》&#xff0c;这个版本里面不仅仅包含了面试题&#xff0c;还有更多的技术难点、大厂算法、实战项目、简历模板等等&#xff0c;全册接近1700页&#xff01;相比上一个版本的287页&#xff0c;升级了多少内容你懂的 大概内容&am…

南京邮电大学编译原理实验二(语法分析程序)

文章目录一、文法二、源代码模块&#xff08;一&#xff09;消除文法的左递归&#xff08;二&#xff09;求First集&#xff08;三&#xff09;求Follow集&#xff08;四&#xff09;构建LL(1)分析表&#xff08;五&#xff09;符号串分析&#xff08;六&#xff09;主函数三、…

破解色带现象(下)

编者按&#xff1a;本文是“破解色带现象”文章的第二部分&#xff0c;Fabio Sonnati进一步 分析了色带现象产生的原因&#xff0c;并提供了新的检测办法。本文已获得作者授权转载。翻译&#xff1a;Argus原文链接&#xff1a;https://sonnati.wordpress.com/2022/09/16/defea…

Flink实战案例四部曲

Flink实战案例四部曲 第一部曲:统计5分钟内用户修改创建删除文件的操作日志数量 输入 1001,delete 1002,update 1001,create 1002,delte 输出 1001&#xff0c;2 1002&#xff0c;2代码如下。 import org.apache.flink.streaming.api.environment.StreamExecutionEnvironmen…

Anlios装grouplist 组件之后报错,安装tiger-vncserver

因为之前升级了一个epel-release源&#xff0c;然后containerd也装进去了&#xff0c;但是版本太低 然后以为是runc挡住了&#xff0c;发现没有runc 删完了containerd就可以装了 rpm -ivh http://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm dnf install wntp…

【性能篇】30 # 怎么给WebGL绘制加速?

说明 【跟月影学可视化】学习笔记。 常规绘图方式的性能瓶颈 例子&#xff1a;在一个画布上渲染 3000 个不同颜色的、位置随机的三角形&#xff0c;并且让每个三角形的旋转角度也随机。 <!DOCTYPE html> <html lang"en"><head><meta charse…

SpringBoot+Vue实现前后端分离的高校思政课实践教学管理系统

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue.js 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JD…

基于SSM的大学生心理健康系统设计与实现

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 网站前台&#xff1a;关于我们、联系信息、文章信息、咨询师信息、服务信息、测试信喜 管理员功能&#xff1a; 1、管理…

继续谈谈从Rxjava迁移到Flow的背压策略

前言 对于背压问题不久前就讨论过了&#xff0c;这里就不过多介绍了&#xff0c;总之它是一个非常复杂的话题&#xff0c;本文的主要目的是分析我们如何从Rxjava迁移到Flow并且使用其背压方案&#xff0c;由于本身技术的限制以及协程内部的复杂性&#xff0c;不会做过多的深入…

下载安装PyTorch

1、下载并安装Visual Studio Code选择合适版本安装 2、下载安装conda并配置环境 下载方式一&#xff1a;官网下载 下载方式二&#xff1a;清华镜像安装 3、conda配置环境 打开电脑高级系统配置点开系统环境变量&#xff1a; 找到path然后点击Edit或者直接双击&#xff1a; 之后…

利用LSTM识别篇章关系实战代码+数据

1.显式篇章关系分类概述 案例知识点: 任务描述:篇章关系分析是自然语言中处理篇章级基础语言分析任务,其目的是利用规则或机器学习等计算机处理手段判别篇章各组成成分之间的修辞逻辑关系,从而从整体上理解篇章。其中论元之间有连接词连接的此类关系称为显式篇章关系。本教…

实验七、MOS管分压式偏置共源放大电路的静态和动态参数

一、题目 搭建MOS管分压式偏置共源放大电路。利用Multisim研究下列问题&#xff1a; &#xff08;1&#xff09;确定一组电路参数&#xff0c;使电路的 QQQ 点合适。 &#xff08;2&#xff09;若输出电压波形底部失真&#xff0c;则可采取哪些措施&#xff1f;若输出电压波形…

Mysql概念知识

Mysql数据库基础知识为什么要使用数据库数据保存在内存数据保存在文件数据保存在数据库什么是SQL&#xff1f;什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有几种录入格式&#xff1f;分别有什么区别&#xff1f;数据类型mysql有哪些数据类型引…

计算机毕设Python+Vue学生资源管理系统(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

websocket使用方法

前言 最近项目用到了websocket接口&#xff0c;用来做长连接&#xff0c;监听服务器数据变化&#xff0c;保持各终端数据同步。 用下来发现确实很好用&#xff0c;避免了轮询&#xff0c;开销小&#xff0c;而且最重要的是没有同源策略限制。 websocket WebSocket 是一种在…

Nginx-安装和部署全过程

前言 OpenResty是一个基于Nginx与 Lua 的高性能 Web 平台&#xff0c;其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。openresty官网&#xff1a;OpenResty - 中文官方站 …

软件著作权到底享有哪些权利?

根据《计算机软件保护条例》相关规定 软件著作权人享有下列各项权利: &#xff08;一&#xff09;发表权&#xff0c;即决定软件是否公之于众的权利&#xff1b; &#xff08;二&#xff09;署名权&#xff0c;即表明开发者身份&#xff0c;在软件上署名的权利&#xff1b; &a…

iOS的启动优化

应用的启动优化 当我们参与到大型应用的时候 会遇到一些启动时间过长的情况 这时候就需要使用到相关的操作。 总结来说&#xff0c;main()方法调用前&#xff0c;启动过程大体分为如下步骤&#xff1a; 先是LLVM把项目翻译成IR文件然后到backend&#xff0c;PRE_MAIN,main。 …

感冒咳嗽土法子

目录介绍 01.常见的感冒药02.止咳的土方法03.感冒的土方法 01.常见的感冒药 感冒是生活中最常见的疾病 患者往往会有&#xff1a;头昏、发烧、浑身酸痛、鼻塞、流鼻涕等症状 注意点 注意休息&#xff0c;适当补充水分&#xff0c;保持室内空气流通。 常见感冒药 主要成分的作…