指针(4)

目录

1. 数组名的理解

 但是有两个例外

sizeof(数组名),

• &数组名

 2. ⼀维数组传参的本质

2.1指针打印数组

 3.冒泡排序

 4.二级指针

5  指针数组

5.1 指针数组模拟二维数组


1. 数组名的理解

前面数组中提到  数组名的地址就是首元素的地址, 代码如下

#include <stdio.h>
int main()
{int arr [20] = {1,2,3,4,5,6,7};int* p = &arr;printf(" arr    =   %p\n", arr);printf(" &arr[0]=   %p\n", &arr[0]);//最终结果首元素地址和数组名的地址是一样的return 0;
}

 运行结果为:

 但是有两个例外

sizeof(数组名)

sizeof中单独放数组名,这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩, 单位是字节

#include<stdio.h>
int main()
{int arr[10] = { 0 };printf("%zd ", sizeof(arr));//被sizeof计算的不是int类型的数组了//,而是整个数组的大小。return 0;
}

 运行结果:

 

&数组名

,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素 的地址是有区别的) 除此之外,任何地⽅使⽤数组名,数组名都表⽰⾸元素的地址

 下面我们比较一下 数组名地址、首元素地址、&数组名的地址。

#include <stdio.h>
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//printf("%zd ", sizeof(arr));//被sizeof计算的不是int类型的数组了//,而是整个数组的大小。printf("&arr[0] =%p\n ", &arr[0]);printf("&arr    =%p\n ", &arr);printf("arr     =%p\n ", arr);return 0;
}

 

 由上面运行程序结果发现,这三个的地址一模一样,那为什么还会说&数组名取出整个数组的地址呢?别急下面我们来探究

我们来一个测试 给上面三位都加上1 在运行程序,

#include<stdio.h>
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//printf("%zd ", sizeof(arr));//被sizeof计算的不是int类型的数组了//,而是整个数组的大小。printf("&arr[0]   =%p\n ", &arr[0]);printf("&arr[0]+1 =%p\n ", &arr[0]+1);printf("arr       =%p\n ", arr);printf("arr+1     =%p\n ", arr + 1);printf("&arr      =%p\n ", &arr);printf("&arr+1    =%p\n ", &arr+1);return 0;
}

 下面结果可以发现  数组名的地址( arr) 首元素地址(arr[0]  ) 加1的的结果是一样的,这也就更加确定了数组名的地址就是首元素的地址 ,因为int类型是四个字节,所以后面加四。那&arr为什么就不一样了呢?我们下面来探究

结果如下:

 

 由上面可知:*(p+i)与arr[i]  是相等的 

总结:数组在内存中是连续存放的, 指针很方便的

 2. ⼀维数组传参的本质

下面来讨论一下数组传参是数组吗?

#include<stdio.h>
void test(int arr[10])
{int sz2 = sizeof(arr) / sizeof(arr[0]);printf(" sz2 = %d \n", sz2);}
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int sz1 = sizeof(arr) / sizeof(arr[0]);printf("sz1 = %d \n", sz1);test(arr);return 0;
}

 运行结果sz2 为什么会是1呢?

这是因为在test函数传参的时候,那里的arr是数组名,前面讲到数组名就是首元素的地址,当然这个函数传参把首元素的地址传过去了,那sizeof arr 得到的就是首元素的地址, 首元素  / 首元素那么当然就是1 了。根据编译器环境的位数不同。 

即使数组传参写的是数组,但是他的本质还是指针。

数组传参的时候,接受的可以是数组,也可是是指针。

2.1指针打印数组

 

#include <stdio.h>
void test ( int* arr, int sz )//前面的首元素地址用数组,用指针也可以{int i = 0;for (i = 0; i < sz; i++){printf(" %d", arr[i]);}}
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int sz = sizeof(arr) / sizeof(arr[0]);test(arr,sz);//传参( 首元素地址,元素个数);return 0;
}

 3.冒泡排序

冒泡排序的核⼼思想就是: 两两相邻的元素进⾏⽐较

输出结果:升序 1 2 3 4 5 6 7 8 9 10

void input(int* arr, int sz)
{int i = 0; for (i = 0; i < sz; i++){scanf("%d", arr + i);}}void  Bubble_sort(int* arr, int sz)//冒泡排序的实现{int i = 0;for (i = 0; i < sz - 1;i++ )//外层确定趟数,因为10个数比较需要9趟{int j = 0;for (j = 0; j < sz - 1 - i; j++)//内层趟数{if (arr[j] > arr[j + 1])//如果前面比后面大,那么就交换。{int tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;}}}
}void print(int* arr, int sz){int i = 0;for (i = 0; i < sz; i++){printf("%d ", arr[i]);}}
int main()
{int arr[10] = { 0 };int sz = sizeof(arr) / sizeof(arr[0]);input(arr,sz);Bubble_sort(arr, sz);print(arr, sz);return 0;

 每一个小题都要细心 ,我写的冒泡排序找了半天错误 ,一定要细心,不要像我一样

 如果一次都没有排序,再依次比较代码质量不是很好,那么将代码进行小小的修改。

 void  Bubble_sort(int* arr, int sz)//冒泡排序的实现{int i = 0;int flag = 1;//假设flag为真for (i = 0; i < sz - 1;i++ )//外层确定趟数,因为10个数比较需要9趟{int j = 0;for (j = 0; j < sz - 1 - i; j++)//内层趟数{if (arr[j] > arr[j + 1])//如果前面比后面大,那么就交换。{flag = 0;// 为假就会变0int tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;}	if (flag == 1)//如果flag没有改变,那么就说明flag一次排序都没有,停止就结束{break;}}}}

 微调的部分 ,使得代码的性能更高

 4.二级指针

指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪⾥? 这就是 ⼆级指针 。

 

5  指针数组

指针数组是指针还是数组?

指针数组是存放指针的数组,数组的每个元素是指针类型

char *arr[ ]  -- 存放字符类型的数组

int* arr[ ]  --- 存放整形类型 的数组 

#include <stdio.h>
int main()
{int a = 1;int b = 2;int c = 3;int* arr[3] = { &a,&b,&c };//存放在整型数组里int i = 0;for (i = 0; i < 3; i++){printf("%d ", *(arr[i]));//打印}return 0;
}

5.1 指针数组模拟二维数组

也不算很难吧,能实现出来

#include <stdio.h>
int main()
{int arr1[5] = {1,2,3,4,5};int arr2[5] = {2,3,4,5,6};int arr3[5] = {3,4,5,6,7};int* arr[3] = { arr1,arr2,arr3 };int i = 0;for (i = 0; i < 3; i++){int j = 0;for (j = 0; j < 5; j++){printf("%d ", arr[i][j]);}printf("\n");}return 0;}

 运行结果

 完结 下班 祝大家个国庆节快乐!!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国庆节快乐

葡萄城在这里祝大家国庆快快乐&#xff1a; 10月葡萄城活动&#xff1a; 公开课 【从软件应用走向数据应用——葡萄城技术赋能数据挖掘】 新版本发布&#xff1a; 活字格 V10.0 Update1新版本发布

【cache】浅析四种常用的缓存淘汰算法 FIFO/LRU/LFU/W-TinyLFU

本文浅析淘汰策略与工作中结合使用、选取&#xff0c;并非针对算法本身如何实现的 文章目录 FIFOLFULRUW-TinyLFU实践与优化监控与调整 FIFO first input first output &#xff0c; 先进先出&#xff0c;即最早存入的元素最先取出&#xff0c; 典型数据结构代表&#xff1a;…

2024年10月1日历史上的今天大事件早读

989年10月1日 北宋政治家范仲淹出生 1814年10月1日 反法联盟各参加国在奥地利首都维也纳召开会议 1927年10月1日 苏联开始实施第一个五年计划 1930年10月1日 中国收回威海卫租界 1931年10月1日 日本人在东北拼凑伪政权 1938年10月1日 大型纪录片《延安与八路军》开拍 194…

65.【C语言】联合体

目录 目录 1.定义 2.格式 3.例题 答案速查 分析 4.练习 答案速查 分析 5.相同成员的联合体和结构体的对比 6.联合体的大小计算 2条规则 答案速查 分析 练习 答案速查 分析 7.联合体的优点 8.匿名联合体 1.定义 和结构体有所不同,顾名思义:所有成员联合使用同…

VS code user setting 与 workspace setting 的区别

VS code user setting 与 workspace setting 的区别 引言正文引言 相信有不少开始接触 VS code 的小伙伴会有疑问,user setting 与 workspace setting 有什么区别呢?这里我们来说明一下 正文 首先,当我们使用 Ctrl + Shift + P 打开搜索输入 setting 后,可以弹出 4 个se…

【2023工业3D异常检测文献】M3DM: 基于混合融合的多模态工业异常检测方法

Multimodal Industrial Anomaly Detection via Hybrid Fusion 1、Background 随着3D传感器的发展&#xff0c;最近发布了具有2D图像和3D点云数据的MVTec-3D AD数据集&#xff0c;促进了多模态工业异常检测的研究。 无监督异常检测的核心思想是找出正常表示与异常之间的差异。…

Android Studio Dolphin 中Gradle下载慢的解决方法

我用的版本Android Studio Dolphin | 2021.3.1 Patch 1 1.Gradle自身的版本下载慢 解决办法&#xff1a;修改gradle\wrapper\gradle-wrapper.properties中的distributionUrl 将https\://services.gradle.org/distributions为https\://mirrors.cloud.tencent.com/gradle dis…

2024 maya的散布工具sppaint3d使用指南

目前工具其实可以分为三个版本 1 最老的原版 时间还是2011年的&#xff0c;只支持python2版的maya 2 作者python3更新版 后来作者看maya直到2022上还是没有类似好用方便的工具&#xff0c;于是更新到了2022版本 这个是原作者更新的2022版本&#xff0c;改成了python3&#…

SpringBoot——基础配置

但是还需要删除pom.xml中的标签——模板的文件也同样操作 banner的选项——关闭 控制台 日志 banner图片的位置——还会分辨颜色 在 Java 的日志框架&#xff08;如 Logback、Log4j2 等&#xff09;中&#xff0c;logging.level.root主要用于设置根日志记录器的日志级别…

IIS开启后https访问出错net::ERR_CERT_INVALID

安装ArcGIS server和portal等&#xff0c;按照说明上&#xff0c;先开启iis&#xff0c;在安装server、datastore、portal、webadapter等&#xff0c;遇到一些问题&#xff1a; 问题1 访问http正常&#xff0c;访问https出错&#xff1a; 解决方案 从这里找到解决方案&…

TDesign组件库+vue3+ts 如何视觉上合并相同内容的table列?(自定义合并table列)

背景 当table的某一列的某些内容相同时&#xff0c;需要在视觉上合并这一部分的内容为同个单元格 如上图所示&#xff0c;比如需要合并当申请人为同个字段的列。 解决代码 <t-table:data"filteredData":columns"columns":rowspan-and-colspan"…

宝塔部署vue项目出现的各种问题

使用宝塔面板&#xff0c;网站页面&#xff0c;构建php静态网页 问题一&#xff1a;图片等静态资源无法加载 找到真正请求的url&#xff0c; 然后在项目目录下面创建对应的目录&#xff0c;将资源放入 问题二&#xff1a;刷新出现404 在这里任意位置添加 ## 添加上这个配…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-28

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-28 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-28目录前言1. Cognitive phantoms in LLMs through the lens of latent variables摘要研究背景问题与挑战创新点算法模型实验效果…

业务封装与映射 -- AMP BMP GMP

概述 不同单板支持不同的封装模式&#xff0c;主要包括: AMP (Asynchronous Mapping Procedure&#xff0c;异步映射规程)BMP (Bit-synchronous Mapping Procedure&#xff0c;比特同步映射规程)GMP (Generic Mapping Procedure&#xff0c;通用映射规程) AMP/BMP&#xff1a…

解决VS Code工具在终端执行命令的时候无法加载文件

错误&#xff1a;tsc : 无法加载文件 E:\KTSP\WaitForMe\install\nodejs\node_global\tsc.ps1,因为在此系统上禁止运行脚本 问题原因&#xff1a;由于windwos11上默认上关闭了运行脚本的策略&#xff0c;所以我们要设置允许执行脚本 1.WinX打开终端管理员输入 Get-ExecutionP…

【每天学个新注解】Day 10 Lombok注解简解(九)—@Accessors

在之前的几天&#xff0c;我们系统学习了Lombok的常见注解&#xff0c;并且将其官网stable中的所有注解都讲解了一编&#xff0c;接下来会通过两到三天的时间将Lombok目前正在试验的&#xff08;experimental&#xff09;注解简单过一遍&#xff0c;以下为experimental状态的所…

uniapp框架中实现文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间

前言 uni-file-picker是uniapp中的一个文件选择器组件,用于选择本地文件并返回选择的文件路径或文件信息。该组件支持选择单个文件或多个文件,可以设置文件的类型、大小限制,并且可以进行文件预览。 提示:以下是本篇文章正文内容,下面案例可供参考 uni-file-picker组件具…

学习记录:js算法(五十):二叉树的右视图

文章目录 二叉树的右视图我的思路网上思路 总结 二叉树的右视图 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 图一&#xff1a; 示例 1:如图一 输入: [1,2,3,null,5,null,4] …

SigmaStudio控件Cross Mixer\Signal Merger算法效果分析

衰减与叠加混音算法验证分析一 CH2:输入源为-20dB正弦波1khz CH1叠加混音&#xff1a;参考混音算法https://blog.csdn.net/weixin_48408892/article/details/129878036?spm1001.2014.3001.5502 Ch0衰减混音&#xff1a;外部多个输入源做混音时&#xff0c;建议参考该算法控件&…

开源模型应用落地-模型微调-语料采集-数据标注(二)

一、前言 在自然语言处理(NLP)的快速发展中,语料采集作为基础性的步骤显得尤为重要。它不仅为机器学习模型提供了所需的训练数据,还直接影响模型的性能和泛化能力。随着数据驱动技术的不断进步,如何有效并高效地收集、清洗和整理丰富多样的语料,已成为研究者和工程师们亟…