v68.指针

1.取地址运算

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

  • 打印出变量的地址,需要使用 %p,注意后面加运算符 & 。注意输出地址的代码格式。
  • %p会把这个值作地址来输出,输出的结果前面会加0x,并且以16进制的方式来输出地址
    在这里插入图片描述
  • 注意int 的大小是否和地址大小相同取决于编译器32架构还是64架构(地址和整数不是一定相同的
    在这里插入图片描述&去取地址的时候,必须对 一个变量 取地址!(如果不是一个变量,无法取地址)

1.3

  • 相邻变量的地址:
    如果两个变量储存在内存中是相邻的,那么他们的地址相差4字节(int类)
    在这里插入图片描述

  • 数组的地址:
    在这里插入图片描述发现int类数组相邻单元的地址差4字节
    在这里插入图片描述

2.指针

指针变量就是记录地址的变量
2.1
在这里插入图片描述在这里插入图片描述
“ *p ” 在这表示p是指针变量,它指向的是int。
p指向了i,即p的值就是i变量的地址
在这里插入图片描述

int* p,q;
int *p,q;
这两种代码是等效的
星号不是给int而是给p,即 *p 是一个int类变量
q只是一个普通的变量。

如果要表达p,q都是指针变量:
int *p,*q;//p,q里面会有别的变量的地址
  • 指针变量的值是 具有实际值的变量的 地址,这个地址会指向实际的变量
  • 指针变量里面不会放实际的值
  • 普通变量的值是实际的值
    在这里插入图片描述2.2 作为参数的指针
    在这里插入图片描述
  • 如果f()函数需要指针变量作为参数,那么就需要传入变量的地址,而不可以传入变量本身或者变量的值
    在这里插入图片描述在main函数中的变量i的地址传入f()函数,并把i的地址交给了f函数中的变量p。使得f函数拥有能够访问外部变量i的能力了
    那么,p就是一个指针,它指向i这个变量。
    在这里插入图片描述
  • 如果函数要求传入的是普通变量,那么只会得到变量的值
    在这里插入图片描述2.3 访问
    在这里插入图片描述
    在这里插入图片描述
  • 将&i 和 p 做地址输出,结果是一样的。在这里p就是指针变量,他已将被传入了变量的地址。所以在输出地址的时候,结果是一样的。
  • “p的值就是i的地址”
int a[] = {0};
int *p = a;
——>p == &a[0]表达式的值是True
  • *号在这里作为单目运算符,表示要访问对应地址的变量。*p就是i,使用%d输出 i 的值。

在这里插入图片描述随后添加的代码 *p = 26;实际就是i = 26;

3.指针与数组

在这里插入图片描述

  • 实际上,在函数中传入的数组参数实际上就是指针变量。
  • void minmax(int a[], int len, int *min, int *max)中的 a[ ] 写成 *a 指针的形式完全没有问题,int sum(int *a);int sum(int a[]); 这两种作为函数原型的写法是等价的。尽管函数体内部仍然使用了数组a[ ]
  • 这就解释了为什么在函数参数那里不能使用sizeof()函数进行数组长度的计算
    在这里插入图片描述在这里插入图片描述
    数组其实 “可以被看做”是常量指针
  • 数组变量本身表达的是数组的起始地址,也就是第一个元素的地址;所以int *p = a; 等效于 int *p = &a[0];
  • 变量的地址——>变量
&a 表示数组a的初始地址(&号可以省略),即第一个元素的地址
&a[0] 表示数组第一个元素的地址
&a[1] 表示数组第二个元素的地址
  • 关于 指针[ ] 访问
int a[] = { 5,15,34,54,14,2,52,72 };
int* p = &a[5];
printf("%d", p[-2]);

代码中指针变量p指向了数组a的第6个数据:2,下一步执行p[-2]操作,是向前移动2个位置,即第4个数据:54。所以输出结果是54

int a[] = {5,15,34,54,14,2,52,72};
int *p = &a[1];
同理,p[2]的值是54
int a[] = {0};
int *p = a;
那么以下表达式的结果为真:
p == &a[0];//p的值就是a第一个数据的地址
*p == a[0];//指向第一个数据,*p就表示访问对应地址的数据
p[0] == a[0];//p[0]是数组的访问方式,表示访问数据后后移0个单位,还是原来*p那个数据

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

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

相关文章

嵌入式 Linux 下的 LVGL 移植

目录 准备创建工程修改配置修改 lv_drv_conf.h修改 lv_conf.h修改 main.c修改 Makefile 编译运行更多内容 LVGL(Light and Versatile Graphics Library,轻量级通用图形库)是一个轻量化的、开源的、在嵌入式系统中广泛使用的图形库&#xff0c…

算法:动态规划全解(上)

一、动态规划初识 1.介绍 动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的。 例如:有N件物品…

逆向案例三:动态xhr包中AES解密的一般步骤,以精灵数据为例

补充知识:进行AES解密需要知道四个关键字,即密钥key,向量iv,模式mode,填充方式pad 一般网页AES都是16位的,m3u8视频加密一般是AES-128格式 网页链接:https://www.jinglingshuju.com/articles 进行抓包结果返回的是密文: 一般思…

软考48-上午题-【数据库】-数据查询语言DQL3-表的连接查询

一、表的连接查询 数据查询中,经常需要提取两个或者多个表的数据,需要用表的连接来实现若干个表数据的联合查询。格式如下: select 列名1, 列名2, 列名3, ...... from 表1, 表2, ...... where 连接条件 在SQL SERVER中,连接分为…

Apipost自动化测试持续集成配置方法

安装 Apipost-cli npm install -g apipost-cli 运行脚本 安装好Apipost-cli后,在命令行输入生成的命令,即可执行测试用例,运行完成后会展示测试进度并生成测试报告。 Jenkins配置 Apipost cli基于Node js运行 需要在jenkins上配置NodeJs依…

Python中re(正则)模块的使用

re 是 Python 标准库中的一个模块,用于支持正则表达式操作。通过 re 模块,可以使用各种正则表达式来搜索、匹配和操作字符串数据。 使用 re 模块可以帮助在处理字符串时进行高效的搜索和替换操作,特别适用于需要处理文本数据的情况。 # 导入…

【MySQL】MySQL复合查询--多表查询自连接子查询 - 副本

文章目录 1.基本查询回顾2.多表查询3.自连接4.子查询 4.1单行子查询4.2多行子查询4.3多列子查询4.4在from子句中使用子查询4.5合并查询 4.5.1 union4.5.2 union all 1.基本查询回顾 表的内容如下: mysql> select * from emp; ----------------------------…

ubuntu安装新版本的CMake

来到cmake官网选择版本 我需要在嵌入式板子上的Ubuntu18安装使用 故我选择aarch64版本。 按F12进入检查模式得到下载链接。 在板子上运行以下命令,获取安装脚本 wget https://github.com/Kitware/CMake/releases/download/v3.28.3/cmake-3.28.3-linux-aarch64.s…

Django模板(四)

一、include标签 加载一个模板,并在当前上下文中进行渲染。这是一种在模板中 “包含” 其他模板的方式 简单的理解:在当前模板中引入另外一个模板内容 1.1、使用方法 模板名称可以是变量,也可以是单引号或双引号的硬编码(带引号)的字符串 {% include "foo/bar.ht…

接口自动化测试之HTTP协议详解

协议 简单理解,计算机与计算机之间的通讯语言就叫做协议,不同的计算机之间只有使用相同的协议才能通信。所以网络协议就是为计算机网络中进行数据交换而建立的规则,标准或约定的集合。 OSI模型 1978年国际化标准组织提出了“开放系统互联网…

BerDiff: Conditional Bernoulli Diffusion Modelfor Medical Image Segmentation

BerDiff:用于医学图像分割的条件伯努利扩散模型 摘要: 医学图像分割是一项具有挑战性的任务,具有固有的模糊性和高度的不确定性,这主要是由于肿瘤边界不明确和多个似是而非的注释等因素。分割口罩的准确性和多样性对于在临床实践中为放射科…

【UVM_Introduction Factory_2024.02.28】

Introduction 通用验证方法学UVM(2014年1.2版本延续至今) 作用: 降低验证工程复杂度,保证验证可靠性,提升验证效率 提供一套标准的类库,减轻环境构建的负担,更多的投入制定验证计划和创建测试场…

springboot228高校教师电子名片系统

高校教师电子名片系统的设计与实现 摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,名片信息因为其管理内容繁杂,管理数…

【数据结构】数组

第一章、为什么数组的下标一般从0开始编号 提到数组,读者肯定不陌生,甚至还会很自信地说,数组很简单。编程语言中一般会有数组这种数据类型。不过,它不仅是编程语言中的一种数据类型,还是基础的数据结构。尽管数组看起…

代码随想录算法训练营29期|day64 任务以及具体安排

第十章 单调栈part03 有了之前单调栈的铺垫&#xff0c;这道题目就不难了。 84.柱状图中最大的矩形class Solution {int largestRectangleArea(int[] heights) {Stack<Integer> st new Stack<Integer>();// 数组扩容&#xff0c;在头和尾各加入一个元素int [] ne…

半小时到秒级,京东零售定时任务优化怎么做的?

导言&#xff1a; 京东零售技术团队通过真实线上案例总结了针对海量数据批处理任务的一些通用优化方法&#xff0c;除了供大家借鉴参考之外&#xff0c;也更希望通过这篇文章呼吁大家在平时开发程序时能够更加注意程序的性能和所消耗的资源&#xff0c;避免在流量突增时给系统…

【web APIs】3、(学习笔记)有案例!

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、概念其他事件页面加载事件元素滚动事件页面尺寸事件 元素尺寸与位置 二、案例举例电梯导航 前言 掌握阻止事件冒泡的方法理解事件委托的实现原理 一、概念…

【MATLAB源码-第151期】基于matlab的开普勒化算法(KOA)无人机三维路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 开普勒优化算法&#xff08;Kepler Optimization Algorithm, KOA&#xff09;是一个虚构的、灵感来自天文学的优化算法&#xff0c;它借鉴了开普勒行星运动定律的概念来设计。在这个构想中&#xff0c;算法模仿行星围绕太阳的…

免费网站搭建

免费网站搭建 一.领取一个免费域名和SSL证书&#xff0c;和CDN 特点&#xff1a;支持Cloudflare CDN Cloudflare是全球知名的CDN提供商&#xff0c;如果你不想暴露你的源站&#xff0c;又想使用我们的二级域名&#xff0c;不需要前往Cloudflare添加域名&#xff0c;修改NS记录…

特斯拉掀起「端到端」风暴,自动驾驶持续开卷

作者 |三少爷 编辑 |祥威 最近&#xff0c;特斯拉向在美用户推送了版本号为V12.1.2 Beta的端到端FSD&#xff0c;版本推送后&#xff0c;海外的特斯拉车主和视频博主上传了一些测试视频&#xff0c;测评视频本身没有太多好说的&#xff0c;真正值得关注的是「端到端」。 自马…
最新文章