指针+一维整型数组的基本运用 和 指针+一维整型数组的初步学习

一,调式程序的技巧:

1.明确问题
2.定位问题
3.加打印(打印核心数据0)


二,指针的回顾

1.指针的概念:指针就是地址(内存单元的编号),是一个数据类型(指针类型)
                         指针在不同于句中: 定义指指针指的是定义一个指针变量(int *p)
                                                           打印指针某个变量的指针,就是打印出一个地址的内容

2.指针变量的定义: 基类型*变量名
基类型:数据类型 / 基本数据类型 / 数组类型 / 指针类型
* : *定义的是一个指针类型的变量,修饰指针变量名的
*p的运算:s1;拿p中的地址到内存定位  ;  s2:定位处偏移基类型大小的空间 ; s3:被当作了基类型变量来看

3.注意事项:指针变量的大小 64位(8字节), 32(四字节) ; 指针类型存储的是地址,特殊的数据   ;    指针变量的给值:int  *p     ---   野指针,没有初始化,被当作了地址,所以要避免野指针,一般初始化为 NULL

4.指针的核心用途:被调函数修改主调
用法:修改谁就传谁的地址       ;    *p的运算---间接访问 

5.指针+ 一维整型数组(指针操作一维)
int a[10];; int *p=a;
*(p+i)  ==  int 型变量               a[i] == p[i] == *(a+i)

6.关系运算:
b>q  ;  b<q  ; &  ;  *    ;  
p-q (前提是同一类型的指针,表示之间差了几个基类型)
指针不能做加法运算

迭代运算:本质就是可以利用指针访问到每一个元素的地址

迭代实现选择排序冒泡排序:

选择排序:

冒泡排序:


三,快速排序(时间复杂度为 n *log n)

快速排序本质就是定义一个基准值,通过从右向左找最大值,再从左向右找最小值,交换,然后循环直至begin和end相等时,此时划分两个部分,然后分别定义基准值重复找数换位的步骤,直至begin>end的时候结束。

快速排序示意图:

快速排序的程序:

void quickSort(int *begin,int *end)       //快速排序
{
	int *p = begin;                       //记录开始的位置和最右边的位置
	int *q= end;

	int *k = begin;                       //第一步,确定基准值,a[0]

	if(begin>end)                         //结束递归的条件
	{
		return ;
	}
	while(begin<end)                      //begin 和 end 不能反过来,而且直到它们相遇停止循环
	{
		while(begin < end && *end >= *k)  //第二步,从右边(最后一项)开始找,找到第一个比基准值小的值
		{
			--end;                        //没找的话向前移位
		}
		while(begin < end && *begin <= *k) //第三步,从左边(a【0】)开始找,找到第一个比基准值大的值
		{
			begin++;                      //没找到向后移位
		}
		swap(begin,end);                  //最大值最小值都找到了,进行它俩的换位
	}                                     //回到循环起始点,接着找最大值最小值

	swap(begin,k);                        //此时相遇位置上的值与基准值交换
	quickSort(p,end-1);                   //针对数小的一部分,此时begin为开始的a【0】,end为end地址中的新end-1
	quickSort(begin+1,q);                 //针对数字大的部分,此时begin为地址begin+1,end为开始的end
}

四,指针+ 一维字符型数组

char *p = s ;   s就是数组首元素的地址

int puts(const char *s);
const char *S;
const int a;//只读变量
int a=10;
const int*p=&a; //表示基类型 为只读
p---指针变量--本身的类型int*
a---int型变量--本身类型int

const char * 的好处:
1.可以接收字符数组名,也可以接受字符串常量,提高了参数的适用性
2.避免了可能出现的修改的操作,也可以将运行时的错误,提前到编译时发现


四,相关程序

1.数组的逆序,指针。
 

void nixuArray(int *begin, int *end)                           //逆序,纯指针形式
{
	while(begin<end)
	{
		int t = *begin;
		*begin = *end;
		*end = t;
		++begin;
		--end;
	}

}

2.插入排序

void paixuArray(int *begin,int *end)                   //插入排序,纯指针
{
	int *p =begin;
	int *q =NULL;
	for(p=begin;p<=end;p++)
	{
		int t = *p;
		q=p;
		while(q>begin&&*(q-1)>t)
		{
			*q=*(q-1);
			--q;
		}
	       *q=t;
	}
}

3.二分查找

int *binaryD(int *begin,int *end,int n)                                        //二分查找
{
    int *mid=NULL;
	mid = begin+(end-begin+1)/2;
	int *ret=NULL;
	if(begin>end)
	{
		ret = NULL;
	}
	if(*mid>n)
	{
		end=mid-1;
	    ret = binaryD(begin,end,n);
	}else if(*mid<n)
	{
		begin=mid+1;
		ret = binaryD(begin,end,n);
	}else
	{
		ret = mid;
	}
    return ret;
}

4.输入/输出字符串

void Gets(char *s)                       //输入字符串
{
	do
	{
		*s = getchar();
	}while(*s++!='\n');
	s--;
	*s='\0';
}

void Puts(const char *p)                //输出字符串
{
	while(*p!='\0')
	{
		putchar(*p);
		++p;
	}
	putchar('\n');
}

5.相关输出

int main(void)
{
	int a[5]={1,2,4,3,5};
	int i=0;
	//nixuArray(a,a+4);      //逆序的输出
	//paixuArray(a,a+4); //排序的输出(charu)
	//int x=3;
	//int *ret = binaryD(a,a+4,5);
	//printf("%d\n",*ret);            //二分查找的输出
	
	//for(i=0;i<5;i++)
	//{
	//printf("%d",a[i]);
	//}
	//putchar('\n');
	return 0;
}

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

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

相关文章

使用 Dockerfile 定制镜像详解

使用 Dockerfile 定制镜像详解 1.DockerfileFROM 指定基础镜像RUN 执行命令构建镜像 2.COPY 复制文件3.ADD 更高级的复制文件4.CMD 容器启动命令5.ENTRYPOINT 入口点6.ENV 设置环境变量7.ARG 构建参数8.VOLUME 定义匿名卷9.EXPOSE 暴露端口10.WORKDIR 指定工作目录11.USER 指定…

【Django】如何设置支持多语种网站,中文/英文网站

首先&#xff0c;需要明确一点&#xff1a;我们要实现的中英对照翻译&#xff0c;这个翻译不是浏览器翻译的&#xff0c;也不是Django帮你翻译。这个需要你自己事先手动翻译好&#xff0c;存放在专门翻译文件中&#xff0c;Django只是事后调用而已。 第一步 新建项目后&#x…

Python||五城P.M.2.5数据分析与可视化_使用华夫图分析各个城市的情况(中)

目录 1.上海市的空气质量 2.成都市的空气质量 【沈阳市空气质量情况详见下期】 五城P.M.2.5数据分析与可视化——北京市、上海市、广州市、沈阳市、成都市&#xff0c;使用华夫图和柱状图分析各个城市的情况 1.上海市的空气质量 import numpy as np import pandas as pd impor…

【毕业日记】2024.01 - 慢下来,静待花开

转眼距离930离开鹅厂已经120天了&#xff0c;我是很能拖延的&#xff0c;或者是很懂自我麻痹的&#xff0c;这三个多月&#xff0c;一直想要写点东西纪念&#xff0c;一直拖一直拖一直拖…… 疫情这几年经济下行里裁员是个茶余饭后“嬉笑”之余经常被提起的词&#xff0c;部门滚…

JVM 笔记

JVM HotSpot Java二进制字节码的运行环境 好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;具有垃圾回收功能数组下标越界检查多态&#xff08;虚方法表&#xff09; JVM组成 类加载子系统&#xff08;Java代码转换为字节码&#xff09;运行时数据…

【代码随想录-链表】环形链表

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

GEDepth:Ground Embedding for Monocular Depth Estimation

参考代码&#xff1a;gedepth 出发点与动机 相机的外参告诉了相机在世界坐标系下的位置信息&#xff0c;那么可以用这个外参构建一个地面基础深度作为先验&#xff0c;后续只需要在这个地面基础深度先验基础上添加offset就可以得到结果深度&#xff0c;这样可以极大简化深度估…

【前端web入门第三天】02 CSS字体和文本

文章目录: 1.字体 1.1 字体大小 1.2 字体粗细 1.3 字体样式 1.4 行高 1.5 字体族 1.6 font 复合属性 2. 文本 2.1 文本缩进2.2 文本对齐方式2.3 文本修饰线2.4 color文字颜色 1.字体 1.1 字体大小 属性名: font-size属性值:文字尺寸&#xff0c;PC端网页最常用的单位px …

8. Threejs案例-SVG渲染器和WEBGL渲染器对比

8. Threejs案例-SVG渲染器和WEBGL渲染器对比 实现效果 知识点 SVG渲染器 (SVGRenderer) SVGRenderer 被用于使用 SVG 来渲染几何数据&#xff0c;所产生的矢量图形在以下几个方面十分有用&#xff1a; 动画标志 logo 或者图标 icon可交互的 2D 或 3D 图表或图形交互式地图复…

6、应急响应-日志自动提取自动分析ELKLogkitLogonTracerAnolog等

用途&#xff1a;个人学习笔记&#xff0c;欢迎指正 目录 背景: 一、日志自动提取-七牛Logki&观星应急工具 1、七牛Logkit: (支持Windows&Linux&Mac等) 2、观星应急工具(只支持Windows) 二、日志自动分析-Web-360星图&Goaccess&ALB&Anolog 1、W…

Pandas.Series.var() 方差 详解 含代码 含测试数据集 随Pandas版本持续更新

关于Pandas版本&#xff1a; 本文基于 pandas2.2.0 编写。 关于本文内容更新&#xff1a; 随着pandas的stable版本更迭&#xff0c;本文持续更新&#xff0c;不断完善补充。 传送门&#xff1a; Pandas API参考目录 传送门&#xff1a; Pandas 版本更新及新特性 传送门&…

vit细粒度图像分类(六)FBSD学习笔记

1.摘要 从判别局部区域学习特征表示在细粒度视觉分类中起着关键作用。利用注意机制提取零件特征已成为一种趋势。然而&#xff0c;这些方法有两个主要的局限性:第一&#xff0c;它们往往只关注最突出的部分&#xff0c;而忽略了其他不明显但可区分的部分。其次&#xff0c;他们…

从零搭建Vue3 + Typescript + Pinia + Vite + Tailwind CSS + Element Plus开发脚手架

项目代码以上传至码云&#xff0c;项目地址&#xff1a;https://gitee.com/breezefaith/vue-ts-scaffold 文章目录 前言脚手架技术栈简介vue3TypeScriptPiniaTailwind CSSElement Plusvite 详细步骤Node.js安装创建以 typescript 开发的vue3工程集成Pinia安装pinia修改main.ts创…

图解Vue组件通讯【一图胜千言】

Vue的每个组件都有独自的作用域&#xff0c;组件间的数据是无法共享的&#xff0c;但实际开发工作中我们常常需要让组件之间共享数据&#xff0c;今天我们来学习下面三种组件通信方式&#xff1a; 父子组件之间的通信 兄弟组件之间的通信 祖先与后代组件之间的通信 1. 父子组件…

MySQL进阶之锁(全局锁以及备份报错解决)

锁 全局锁 全局锁就是对整个数据库实例加锁&#xff0c;加锁后整个实例就处于只读状态&#xff0c;后续的DML的写语句&#xff0c;DDL语 句&#xff0c;已经更新操作的事务提交语句都将被阻塞。 其典型的使用场景是做全库的逻辑备份&#xff0c;对所有的表进行锁定&#xff…

Windows篇|连接共享文件夹映射驱动器教程

前言 昨天给小伙伴们分享了如何设置Windows共享文件夹的教程 超简单设置Windows共享文件夹,传输文件无烦恼 A电脑设置完共享文件夹之后,只要在同一局域网下,所有的电子设备都可以连接访问A电脑的共享文件夹里的内容。 这样就省去了U盘传输的麻烦,只要A电脑开着机,文件放入…

Mac如何设置一位数密码?

一、问题 Mac如何设置一位数密码&#xff1f; 二、解答 1、打开终端 2、清除全局账户策略 sudo pwpolicy -clearaccountpolicies 输入开机密码&#xff0c;这里是看不见的&#xff0c;输入完回车即可 3、重新设置密码 &#xff08;1&#xff09;打开设置-->用户和群组…

Docker 容器卷

1、概念介绍 如果是CentOS7安全模块会比之前系统版本加强&#xff0c;不安全的会先禁止&#xff0c;所以目录挂载的情况被默认为不安全的行为&#xff0c;在SELinux里面挂载目录被禁止掉了&#xff0c;如果要开启&#xff0c;我们一般使用--privlegedtrue命令&#xff0c;扩大…

Visual Studio Code安装配置C/C++教程 (windows版,亲测可行)

一.下载 Visual Studio Code https://code.visualstudio.com/ 二.安装 选择想要安装的位置: 后面的点击下一步即可。 三.下载编译器MinGW vscode只是写代码的工具&#xff0c;使用编译器才能编译写的C/C程序&#xff0c;将它转为可执行文件。 MinGW下载链接&#xff1a;…

24.云原生ArgoCD高级之数据加密seale sealed

云原生专栏大纲 文章目录 数据加密之seale sealedBitnami Sealed Secrets介绍Bitnami Sealed Secrets工作流程安装sealed-secrets和kubeseal安装sealed-secrets-controller安装kubeseal通过kubeseal将sealed-secrets公钥拿出来通过kubeseal加密secrets替换kustomize下secret为…
最新文章