C语言基础——指针

news2024/11/25 6:40:43

文章目录

  • 一、指针
    • 1.指针的意义
    • 2.指针类型表示
    • 3.一些操作
      • 3.1打印1个变量地址
      • 3.2通过地址查看改地址的内容以及修改改地址的内容
      • 3.3操作某个空间 -- 4个字节,给他赋值为100,只知道该空间的地址0x8000 0000
    • 4.指针变量的定义
    • 5.指针类型的大小
    • 6.指针变量的使用
      • 6.1 指针变量的初始化
      • 6.2一个指针变量对应多个普通变量
      • 6.3想通过指针对某个变量空间操作:
      • 6.4一个变量,多个指针指向该变量
      • 6.5指针类型的强转
    • 7.指针的其他应用
      • 7.1 指针变量+1,物理地址变化
      • 7.2指针与一维数组
        • 7.2.1数组名代表该数组的首地址
        • 7.2.2num和&num[0] -- 指针类型
        • 7.2.3 *num -- 代表
        • 7.2.4 *(p+1)和*p+1的区别
        • 7.2.5 *p++和++*p的区别:
        • 7.2.6扩展:数组名代表该数组的首地址,不能够进行变量++。
      • 7.3数组名和指针名:指针名可以替换数组名
      • 7.4指针与二维数组
        • 7.4.1二维数组的首地址表示
        • 7.4.2上述3种首地址表示方式他们的指针类型分别是:
        • 7.4.3获取第一行首地址
        • 7.4.4二维数组的数组名 -- 数组指针类型
      • 7.5扩展
      • 7.6指针的指针--二级指针

一、指针

指针就是地址。

1.指针的意义

地址:数据的位置。
指针是C语言提供的一种类型。

2.指针类型表示

类型 *
类型:char int float double 指针 结构体 数组
//char * – 代表这个地址里面存放的是char型数据 — 该指针指向一个char型空间
//int * – 代表这个地址里面存放的是int型数据
问题:
在这里插入图片描述
通过强制类型转换:(int *)0x40000000 – C语言代表1个可以存放整型数据的地址
在这里插入图片描述
*地址 – 代表该地址中的内容。
int num = 10;
打印num变量的地址:%p,&num
32位CPU和系统:地址 – 0x0000 0000 ~ 0xffff ffff – 32位
64位CPU和系统:地址 – 64位

3.一些操作

3.1打印1个变量地址

&变量名 – 普通变量。
数组名 – 数组。

3.2通过地址查看改地址的内容以及修改改地址的内容

在这里插入图片描述
操作空间如下图
在这里插入图片描述

3.3操作某个空间 – 4个字节,给他赋值为100,只知道该空间的地址0x8000 0000

*((int *)0x8000 0000) = 100;
//但是操作系统显示段错误,不允许普通用户直接修改地址的空间,基层嵌入式可以

4.指针变量的定义

类型 *标识符; – 没有赋初值,称为野指针变量。
类型 *标识符 = NULL; (习惯)
类型 *标识符 = &变量名;(习惯)

int num = 100;
定义1个指针变量指向该num空间?
int *pnum = #
pnum 代表的是本身变量的空间
*pnum 代表的是指向的空间
在这里插入图片描述

5.指针类型的大小

指针类型的大小–32位/64位
在这里插入图片描述
在这里插入图片描述

6.指针变量的使用

6.1 指针变量的初始化

例如:int num = 0; char ch = 0; char str[1024]=”\0”;
int *pnum = NULL;//NULL – 空 = 0
指针变量在不使用的情况下,一般初始化为NULL,否则我们称该指针为野指针。

6.2一个指针变量对应多个普通变量

//int num1=100,num2=500;
//int pnum = NULL;
//pnum指向num1 – C语言如何编写? pnum = &num1; – 可以通过
pnum 操作num1的空间。
//pnum指向num2 – C语言如何编写? pnum = &num2; – 可以通过*pnum操作num2的空间。
在这里插入图片描述

6.3想通过指针对某个变量空间操作:

1.定义一个指针变量 int pnum = NULL;
2.把某个变量的地址赋值给指针变量 pnum = #
3.通过
指针变量名,就可以操作某个变量空间 *pnum = 1000;

6.4一个变量,多个指针指向该变量

在这里插入图片描述

6.5指针类型的强转

和普通变量一样。(指针类型) 某个变量地址。
unsigned int num = 0x12345678;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.指针的其他应用

7.1 指针变量+1,物理地址变化

指针变量+1,物理地址+类型大小。

7.2指针与一维数组

7.2.1数组名代表该数组的首地址

打印数组的首地址
在这里插入图片描述
在这里插入图片描述

7.2.2num和&num[0] – 指针类型

一样:num – 整型*
num[0] – 整型*

7.2.3 *num – 代表

– 数组中第0个元素的空间 num[0]

7.2.4 (p+1)和p+1的区别

          *(p+1) 代表:地址+1 -- num[1] 

在这里插入图片描述
p+1 = num[0]+1 = 11 – -因为优先级 > + 先执行*p,再执行+1

例1:
打印:int num[5]={10,8,6,4,2};num的内容,通过地址打印
在这里插入图片描述
例2:
打印:int num[5]={10,8,6,4,2};num的内容,通过指针变量打印
在这里插入图片描述

7.2.5 *p++和++*p的区别:

原因:++和的优先级相同,从右到左执行。
先执行++,再执行
p,地址+1(下面例子)
在这里插入图片描述
先执行*p,再++,内容+1
在这里插入图片描述

7.2.6扩展:数组名代表该数组的首地址,不能够进行变量++。

7.3数组名和指针名:指针名可以替换数组名

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

7.4指针与二维数组

指针变量与二维数组的元素之间的关系:
在这里插入图片描述

7.4.1二维数组的首地址表示

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

7.4.2上述3种首地址表示方式他们的指针类型分别是:

&num[0][0] – int * – 整型指针类型 – 第0行0列元素的地址 = int *
num – int (*)[4] – 整型数组指针类型
num[0] – int * – 整型指针类型 – 第0行的首地址 = int *
在这里插入图片描述

7.4.3获取第一行首地址

获取第1行的首地址:
&num[1][0]
也可以:num[1]
在这里插入图片描述
结果:num[0] num[1] num[2] – 代表了3个一维数组

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

7.4.4二维数组的数组名 – 数组指针类型

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

7.5扩展

数组指针 – 代表是指针 – 用于二维数组中。
指针数组 – 代表是数组 – 指针类型的数组
在这里插入图片描述

7.6指针的指针–二级指针

获取一个指针变量的地址?
&变量名;
定义1个指针变量,保存另外一个指针变量的地址。 — 二级指针

p – 本身变量空间
*p – 指向的空间
*(地址) – 对该地址进行寻址

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

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

相关文章

python数据分析-matplotlib折线图知识总结01

python绘图库matplotlib的知识总结一.matplotlib是什么二.matplotlib的安装与导入三.matplotlib的常用函数四.matplotlib绘制折线图的使用方法1.设置图形大小2. 利用数据绘图3.调整x,y轴的刻度,旋转角度,显示描述信息,绘制网格,添加图例4.图形的样式5.绘制多条折线6.显示绘制的…

python知识记录:灵活使用numpy提高python数据分析效率!

NumPy是Python语言的一个第三方库,其支持大量高维度数组与矩阵运算。 作为python科学计算领域的三剑客之一,numpy在数据分析处理方面有着独特的魅力! numpy模块的出现更多的是在数组处理的操作上面,并且支持和python常用的数据结…

Transformer在时序预测的应⽤第一弹——Autoformer

Transformer在时序预测的应⽤第一弹——Autoformer 原文地址:Autoformer: Decomposition Transformers with Auto-Correlation for Long-Term Series Forecasting(NIPS 2021) 做长时间序列的预测 Decomposition把时间序列做拆分&#xff0c…

目标检测——YOLOv7(十三)

简介: 继美团发布YOLOV6之后,YOLO系列原作者也发布了YOLOV7。主要从两点进行模型的优化:模型结构重参化和动态标签分配。 YOLOv7的特点是快!相同体量下比YOLOv5精度更高,速度快120%,比YOLOX快180%。 Github…

RabbitMQ消息丢失的情况,以及如何通过代码解决

目录 RabbitMQ消息丢失问题: 代码部分: 完整代码: RabitMQConfig: CourseMQListener: 生产者跟交换机通信的消息丢失解决 : 交换机跟消息队列的消息丢失: 消息队列跟消费者的消息丢失: …

自动处理【支付宝交易支付投诉管理系统】配置指南

大家好,我是小悟 已经有小伙伴开始使用自动处理【支付宝交易支付投诉管理系统】,所以详细介绍一下如何配置。 阅读这篇文章之前,结合这篇【连夜干出来一个自动处理【支付宝交易支付投诉管理系统】,支持多商户】干货食用更佳。 连…

Filter 过滤器 Listener 监听器

Filter web中的过滤器当用户访问服务器资源时,过滤器将请求拦截下来,完成一些通用的操作应用场景如:登录验证、统一编码处理、敏感字符过滤 编写filter对目标资源servlet进行拦截 1. 编写java类,实现filter接口 public class Qu…

智慧医院人员定位系统解决方案,助力医院安全管理智能化

随着经济的发展与生活质量的提升,人们对医疗健康的重视度越来越高,医疗行业也因此蓬勃发展起来。然而,不断扩大的经营规模也给医院安全管理带来挑战和难题。 医院安全管理痛点 1、医疗事件信息获取不及时甚至存在瞒报现象,管理者…

yc博客项目创建-白手起家

初始化项目 1、码云创建代码库 2、下载码云项目到本地 3、IDEA直接生成springboot项目 接入mysql 1、配置文件 2、代码配置 启动项目 访问项目 访问连接: http://localhost:8089/yc-blog/index/listlistContent 注意点:server.servlet.context-path…

Redis用于全局ID生成器、分布式锁的解决方案

全局ID生成器 每个店铺都可以发布优惠卷 当用户抢购时,就会生成订单并保存到tb_voucher_order这张表中,而订单表如果使用数据库自增id就存在一些问题: 1.id的规律性太明显 2.受单表数据量的限制 全局ID生成器,是一种在分布式系…

极光笔记 | 如何在Shopify中使用EngageLab (下)

Sendgird发布的《2022 Global Messaging Engagement Report》中揭示了世界各地的用户更喜欢用哪种方式与品牌互动,结论是:“电子邮件仍然是第一名(短信紧随其后)”。4800多名受访者中,有18%的人将电子邮件列为他们最常…

普通人是否能从ChatGPT中分一杯羹?

ChatGPT3.0刚刚推出,最开始的时候,人们只是将ChatGPT看作一个很会聊天的机器人,无论问题多么天马行空,它的答案看上去都有理有据。后来,像打开潘多拉魔盒一样,很多人开始拿它编大纲、撰写文案、编代码、创作…

Docker本地推送到hub,以及上传时遇到的问题解决

1.在本地创建一个 Dockerfile FROM ubuntu:latest RUN apt-get update && apt-get install -y curl CMD ["curl", "https://www.baidu.com"]2.在本地构建 Docker 镜像 在创建本地docker镜像的时候[TAG] .和[TAG] /PATH/TO 需要注意dockerfile文件…

ATTCK v12版本战术介绍——防御规避(二)

一、引言 在前几期文章中我们介绍了ATT&CK中侦察、资源开发、初始访问、执行、持久化、提权战术、防御规避(一)理论知识及实战研究,本期我们为大家介绍ATT&CK 14项战术中防御规避战术(二),包括防御…

【数据结构】顺序栈和链栈的基本操作(定义,初始化, 入栈,出栈,取栈顶元素,遍历,置空)

🎊专栏【数据结构】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【勋章】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 目录 ⭐栈的分类 ✨顺序栈 🎈优点: &…

离线安装k8sv1.20.5版本并部署服务

注意:我这里的离线安装包是V1.20.5的,单安装一个master节点并部署服务,保证可以使用。如果安装集群也是可以的,但是需要把离线包上传到所有的node节点,导入,最后把node节点接入到K8S集群即可,本…

js flyout 2: VScroll

目录版权描述测试页面showFlyout问题1 - scroll 实现可能不准?问题2 - 容器内容重排可导致浮层错位关于重排小结附录 - 完整代码版权 本文为原创, 遵循 CC 4.0 BY-SA 版权协议, 转载需注明出处: https://blog.csdn.net/big_cheng/article/details/130101031. 文中代码属于 pu…

【致敬未来的攻城狮计划】学习总结

文章目录【致敬未来的攻城狮计划】学习总结前言学习总结一、RT-Thread二、RA2E1开发板三、学习移植RT-Thread四、学习RT-Thread设备五、其他收获六、总结【致敬未来的攻城狮计划】学习总结 🚀🚀开启攻城狮的成长之旅!这是我参与的由 CSDN博客…

【RabbitMQ学习日记】——死信队列与延迟队列

一、死信队列 1.1 相关概念 死信,顾名思义就是无法被消费的消息,字面意思可以这样理解,一般来说,producer 将消息投递到 broker 或者直接到 queue 里了,consumer 从 queue 取出消息进行消费,但某些时候由…

云擎未来,智信天下 | 2023移动云大会来了!

新三年,新征程 2023年作为新三年开局之年 移动云又将以怎样的 全新品牌形象、全新战略规划 向“一流云服务商”战略目标勇毅前行? 答案就在这里: 2023移动云大会,官宣定档! 2023.4.25 - 4.26 苏州金鸡湖国际会…