C语言基础之——指针(下)

前言:本篇文章将继续讲解有关指针的剩余基础知识。

学无止境,一起加油叭!!


目录

一.指针运算

1.指针 +- 整数

 2.指针的关系运算

 3.指针 - 指针

二.指针与数组

三.二级指针

四.指针数组

总结


一.指针运算

指针运算包括以下三种:

  • 指针 +- 整数
  • 指针 - 指针
  • 指针的关系运算

1.指针 +- 整数

我们尝试用指针来打印一个数组的内容:

#include<stdio.h>
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int* p = arr;//数组名是数组首元素的地址int i = 0;for (i = 0; i < 10; i++){printf("%d ", *(p + i));}return 0;
}

我们在指针(上)中已经了解到,指针+-整数能够实现指针的跳动。

那么我们便能够根据这个办法来实现打印数组:

p指向的是数组的首元素地址,那么p + i就等于是指针跳到了数组下标为 i 的元素的地址

当然要实现这一点就必须要求数组和指针变量是相同的数据类型

 2.指针的关系运算

指针与指针之间也是可以比较大小的,比较的是指针所指向的地址的大小。

#include<stdio.h>
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int* p1 = &arr[4];int* p2 = &arr[5];if (*p1 > *p2){printf("hehe");}else{printf("haha");}return 0;
}

例如我们来比较一下p1和p2的大小,结果如下:

 3.指针 - 指针

指针-指针的实现必须满足两个条件:

  1. 两个指针指向同一块区域(一个数组等)
  2. 两个指针的类型相同
#include<stdio.h>
int main()
{int arr[10] = { 0 };int* p1 = &arr[9];int* p2 = &arr[0];printf("%d", p1 - p2);return 0;
}

来看上边的代码,会得到什么结果呢???

结果是9,有的小伙伴可能会猜是36,以为会是两个指针之间的字节个数

而实际上是两个指针之间的元素个数

二.指针与数组

如上代码,之所以能把数组和指针联系在一起,是因为数组名可以表示数组首元素的地址

但是数组名也有不同的用法:

  1. 1.sizeof(数组名):数组名单独放在sizeof内部,数组名则代表整个数组,计算的是数组的大小,单位是字节。
  2. &数组名:数组名代表整个数组,取出的是数组的地址,数组的地址和数组首元素的地址值是一样的,但是类型和意义是不一样的。

 三.二级指针

    int a = 5;
    int* p = &a;//p是指针变量,一级指针变量
    int** pp = &p;//pp是指针变量,二级指针变量

这样也很像套娃对不对,所谓二级指针,也就是存放一级指针变量地址的指针。当然也可以有三级、四级、五级等等等等,但是一般都不会用到,包括二级指针也是不常用的。

那么二级指针如果想要找到a的地址,就要解引用两次,第一次是找到*p的地址,第二次才能找到a的地址,所以要用** pp

四.指针数组

听到这个名字可能很多小伙伴会产生疑惑,这个到底是指针还是数组呢???

答案是数组

我们听说过整型数组,浮点型数组,字符数组,它们分别是存放整形、浮点型、字符的数组

那么指针数组也就是存放指针变量的数组

char* arr[5];//存放字符型指针的数组

int* arr2[4];//存放整型指针的数组

那么指针数组到底有什么用处呢???

我们可以用指针数组来模拟实现一个二维数组:

#include<stdio.h>
int main()
{int arr1[] = { 1,2,3,4,5 };int arr2[] = { 6,7,8,9,10 };int arr3[] = { 11,12,13,14,15 };int* arr[] = { 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://xiahunao.cn/news/1617980.html

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

相关文章

路由器密码破解记

2019独角兽企业重金招聘Python工程师标准>>> 前言&#xff1a;寝室的路由器一直被徐**同志控制着&#xff0c;不知道密码&#xff0c;有时要开放一台电脑供外网访问&#xff0c;或者要弄端口映射等很不方便&#xff0c;于是我策划了一次路由器密码破解计划。 首先&a…

关于破解路由器密码

http://daily.zhihu.com/story/3603866?utm_campaignin_app_share&utm_mediumAndroid 先看看上面的那个文章 ------------ Evi1m0大牛破解了路由器的连接密码之后&#xff0c;又破解了路由器的管理登陆密码&#xff0c;这个过程就是一笔带过&#xff0c;在这里详细的说一下…

无涯教程-机器学习 - Jupyter Notebook函数

Jupyter笔记本基本上为开发基于Python的数据科学应用程序提供了一个交互式计算环境。它们以前称为ipython笔记本。以下是Jupyter笔记本的一些功能,使其成为Python ML生态系统的最佳组件之一- Jupyter笔记本可以逐步排列代码,图像,文本,输出等内容,从而逐步说明分析过程。 它有…

0基础入门C++之类和对象下篇

目录 1.再谈构造函数1.1构造函数赋值1.2初始化列表1.3explicit关键字 2.static成员2.1概念2.1静态成员变量2.2静态成员函数2.3特性 3.匿名对象4.友元函数4.1友元函数4.2友元类 5.内部类6.再次理解类和对象 1.再谈构造函数 首先我们先来回忆一下构造函数&#xff1a; 构造函数是…

付费上班,你听说过吗?

众所周知&#xff0c;打工人上班是要拿工资的&#xff0c;哪怕工资再少&#xff0c;也是对打工人劳动的报酬。 然而&#xff0c;最近职场上出现了一个新概念&#xff0c;叫做“付费上班”。什么意思呢&#xff1f;你在公司给老板打工&#xff0c;老板不但不需要给你钱&#xff…

推荐几个适合上班摸鱼的神操作!

俗话说“上班摸鱼一时爽&#xff0c;一直摸鱼一直爽”&#xff0c;"今天&#xff0c;你摸鱼了吗&#xff1f;" 人不是机器&#xff0c;在工作中难免会有疲劳的时候&#xff0c;据权威研究表明&#xff0c;人的专注忍耐极限是2小时&#xff08;我说自己怎么工作一会就…

花5分钟判断,你的Jmeter技能是大佬还是小白!

jmeter 这个工具既可以做接口的功能测试&#xff0c;也可以做自动化测试&#xff0c;还可以做性能测试&#xff0c;其主要用途就是用于性能测试。但是&#xff0c;有些公司和个人&#xff0c;就想用 jmeter 来做接口自动化测试。 你有没有想过呢&#xff1f; 下面我就给大家讲…

潮流玩具行业研究:肇始于童心,进阶于品牌

遍览海内外同行&#xff0c;我们认为依赖外部IP授权的模式难以诞生伟大的潮玩品牌&#xff0c;打造原创IP才是获得持久生命力与高利润率的进阶之路。原创潮玩公司需要积极开拓原创IP&#xff0c;实现从“个别潮玩形象”到“系列潮玩IP”&#xff0c;再到“潮流品牌IP”的三级跃…

361度:聚焦主业品牌加速升级,童装业务打造第二增长极

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;太平洋证券近期发布研报给予361度&#xff08;01361&#xff09;“买入”评级&#xff0c;太平洋证券在研报中称&#xff0c;361度作为国内第四大国产运动品牌&#xff0c;深耕大众运动市场20载&a…

直流无刷电机工作原理及有感方波控制

BLDC方波控制 BLDC工作原理BLDC换向驱动过程有感控制模式 BLDC工作原理 首先要知道&#xff0c;BLDC转起来是基于什么原理 BLDC包括定子&#xff08;线圈&#xff09;和转子&#xff08;永磁体&#xff09;&#xff0c;线圈要通电&#xff0c;通电的线圈具有磁场&#xff0c;该…

传统进销存软件上云势在必行

随着移动互联网的迅猛发展&#xff0c;云服务也是整个社会发展的趋势。传统进销存软件上云势在必行。云端进销存数据安全&#xff0c;操作方便快捷&#xff0c;大大提升工作效率&#xff0c;帮助老板随时随地做生意&#xff0c;也为以后扩大公司经营打好基础&#xff01; 传统软…

进销存软件选哪个好?

以前&#xff0c;在朱泽内金融行业&#xff0c;大多数的较大型企业管理都是纯手工历史记录&#xff0c;包括企业业务流程管理、财务管理记帐等。因为&#xff0c;很多较大型企业体量不大&#xff0c;人员有限&#xff0c;在组织工作职能的划分上也比较混乱&#xff0c;常常是一…

经销商如何挑选一款适合自己的进销存软件?

传统会展民营企业在互联网发展迅速的今天&#xff0c;如果不借助于高效率的控制系统展开网络化结构调整&#xff0c;是无法跟得上时代的步伐的&#xff0c;粗放式低效率的管理工作方式只会引致民营企业越来越困难&#xff0c;生产成本不断增加、销售收入不能获得提高&#xff0…

Excel打造进销存管理系统,让Excel自动化办公~

Excel打造进销存管理系统https://edu.csdn.net/course/detail/38573 进销存管理系统是一个综合性案例&#xff0c;融合函数&#xff0c;透视表&#xff0c;基本图表&#xff0c;宏&#xff0c;VBA&#xff0c;Microsoft Query&#xff0c;Power Query 从基础表格构建 &#xf…

openGauss学习笔记-52 openGauss 高级特性-LLVM

文章目录 openGauss学习笔记-52 openGauss 高级特性-LLVM52.1 适用场景52.2 非适用场景52.3 其他因素对LLVM性能的影响52.4 LLVM使用建议 openGauss学习笔记-52 openGauss 高级特性-LLVM openGauss借助LLVM&#xff08;Low Level Virtual Machine&#xff09;提供的库函数&…

vue2 自定义指令,插槽

一、学习目标 1.自定义指令 基本语法&#xff08;全局、局部注册&#xff09;指令的值v-loading的指令封装 2.插槽 默认插槽具名插槽作用域插槽 二、自定义指令 1.指令介绍 内置指令&#xff1a;v-html、v-if、v-bind、v-on… 这都是Vue给咱们内置的一些指令&#xff0c;…

Java“牵手”天猫商品快递费用API接口数据,天猫API接口申请指南

天猫平台商品快递费用接口是开放平台提供的一种API接口&#xff0c;通过调用API接口&#xff0c;开发者可以获取天猫商品的标题、价格、库存、商品快递费用&#xff0c;宝贝ID&#xff0c;发货地&#xff0c;区域ID&#xff0c;快递费用&#xff0c;月销量、总销量、库存、详情…

freenom php,Freenom免费域名.TK、.CF、.ML、.GA注册及使用方法

去年,Freenom网站来了个大改版,不仅网站页面进行了大幅度调整,更重要的是Freenom这次终于统一了.TK、.CF、.ML、.GA这四个免费域名账号的后台登录,原先.TK、.CF、.ML、.GA都有各自独立的账号系统,现在全部统一使用Freenom的后台账号管理系统。 改版后的Freenom实际上整合了…

<七> objectARX开发:创建自定义实体

1、介绍 在某些情况下,CAD中的实体对象无法满足需求,我们需要针对实际情况来设计并绘制自定义的实体,下面就用一个简单的例子来介绍一下自定义实体绘制。 实体形状:包括实体夹点和文字夹点拖动实现。 2、效果 3、创建自定义实体的步骤 新建一个从AcDbEntity继承的类,如C…

穷建站(二):在DnsPod中为申请的tk域名进行域名解析

文章目录 1 序2 DnsPod域名解析2.1 DnsPod网站账号注册2.2 在DnsPod中添加需要解析的域名 3 在Freenom中进行域名解析配置 1 序 在上一篇博文中&#xff1a;穷建站&#xff08;一&#xff09;&#xff1a;申请免费的tk顶级域名 博文中已经成功的申请了一个tk顶级域名&#xff…