当前位置: 首页 > news >正文

C和指针:指针

内存和地址

程序视角看内存是一个大的字节数组,每个字节包含8个位,可以存储无符号值0至255,或有符号值-128至127。

多个字节可以合成一个字,许多机器以字为单位存储整数,每个字一般由2个或4个字节组成。

由于它们包含了更多的位,每个字可以容纳的无符号整数的范围是从0至4294967295(2^32-1)。尽管一个字包含了4个字节,它仍然只有一个地址。

它的地址是最左边字节或者最右边字节的位置,不同的机器有不同的规定。另一个需要注意的是边界对齐(alignment)。要求边界对齐的机器上,整型值存储的起始位置只能是特定的字节,通常是2或4的倍数。

内存中的每个位置由一个独一无二的地址标识。

内存中的每个位置都包含一个值。

如果知道一个值的存储地址,可以根据地址取得这个值。但是地址不好记,所以可以通过变量名访问地址的值。

名字与内存位置之间的关联并不是硬件所提供的,是由编译器实现的。

int a = 112,b = -1;
float C = 3.14;
int *d = &a;
float *e = &C;
值和类型

c声明为浮点数,但是存放在内存中使用的整数,它们可以被解释为整数,也可以被解释为浮点数,取决于它们被使用的方式。如果使用的是整型算术指令,这个值就被解释为整数,如果使用的是浮点型指令就是浮点数。

不能检查一个值的位来判断类型。为了判断值的类型,必须观察程序中这个值的使用方式。

指针变量的内容

指针变量存放指针指向变量的地址。

d和e的内容是地址而不是整型或浮点型数值。d的内容与a的存储地址一致,而e的内容与c的存储地址一致,

间接访问操作符

通过一个指针访问指向的地址的值间接访问或解引用指针,间接访问的操作符*。

*d=112

*e=3.14

*&a = 25;

把值25赋值给变量 a。

&产生变量 a的地址,它是一个指针常量。*操作符访问其操作数所表示的地址。表达式中操作数是a的地址,所以值25就存储于 a中。

*(int *)100= 25

强制类型转换把值100从“整型”转换为“指向整型的指针",对它进行间接访问。如果 a存储于位置100,那么这条语句就把值25存储于a。

需要通过地址访问内存中某个特定的位置,它并不是用于访问某个变量,而是访问硬件本身。

未初始化和非法的指针

下面的指针a没有初始化就进行赋值,是非法的。a存放的是一个随机的整数,行为未定义。

int*a;
*a = 12;
NULL指针

NULL指针是一个特殊的指针变量,表示不指向任何东西。要使一个指针变量为NULL,可以给它赋一个零值。为了测试一个指针变量是否为NULL,你可以将它与零值进行比较(源代码约定)。

NULL指针并未指向任何东西,因此对NULL指针进行解引用操作是非法的。在对指针进行解引用操作之前,首先必须确保它并非NULL指针。

指针的指针

int a=12;int *b=&a;int **c=&b;

c的类型是一个指针,b是指向整型的指针,c是一个指向整型指针的指针。

指针表达式

char ch= ’a’;char *cp=&ch;

?为ch后面的内存位置(方便后续使用)。

ch

作为右值使用表示表达式的值为'a'

作为左值使用表示内存的地址而不是该地址所包含的值。

&ch

作为右值表示变量ch的地址,这个值等于变量cp存储的值。

只能作为右值,不能作为左值。

cp:右值是cp的值(存放ch的地址),左值是cp所处的位置(左值一般是等号左面用作赋值)。

&cp:右值表示取指针变量的地址,指向字符指针的指针。左值非法。

*cp:右值表示间接访问ch‘a’。左值表示ch的地址

*cp+1

右值:*优先级高于+,所以执行间接访问操作,得到值‘a’,+1后得到’b’。

左值:非法

*(cp+1)

右值表示?的值。左值表示?的地址

++cp

右值:表达式的结果是增值后的指针的一份拷贝。执行后cp指向?

左值非法

cp++

右值:增加cp的值,执行后cp指向?。但先返回cp值的一份拷贝再增加cp的值。表达式的值式cp原来值的一份拷贝。左值非法。

*++cp

右值:间接访问操作符作用再增值后的指针的拷贝上,表示?的值。

左值:表示?内存地址。

*cp++

右值和左值分别是变量ch的值和ch的内存位置。cp指向?

后缀++操作符的优先级高于*操作符。

(1)++操作符产生cp的一份拷贝.

(2)++操作符增加 cp的值.

(3)在cp的拷贝上执行间接访问操作.

++ *cp

右值表示ch变为b,左值非法

(*cp)++

与12类似,结果是ch增值前的值(‘a’),但是ch的值变为’b’。

++*++cp

*++cp,需要做的只是增加它的结果值。

指针运算

当一个指针和一个整数量执行算术运算时,整数在执行加法运算前始终会根据合适的大小进行调整。合适的大小就是指针所指向类型的大小,调整就是把整数值和合适的大小相乘。

算术运算

(1)指针士 整数

指向数组中某个元素的指针

#define N_VALUES 5
float values[N_VALUES]; 
float *vp;
for( vp = &values[0]; vp< &values[N_VALUES];)
*vp++ = 0;

for语句的初始部分把 vp指向数组的第1个元素。

经过第1次循环之后

经过5次循环之后,vp就指向数组最后一个元素后面的那个内存位置。

(2)指针 一 指针

只有当两个指针都指向同一个数组中的元素时,才允许从一个指针减去另一个指针,两个指针相减的结果的类型是 ptrdiff_t,它是一种有符号整数类型。减法运算的值是两个指针在内存中的距离(以数组元素的长度为单位,而不是以字节为单位),因为减法运算的结果将除以数组元素类型的长度。

关系运算

指针都指向同一个数组中的元素可以进行关系运算,判断哪个指针在数组的前面或后面。

相关文章:

C和指针:指针

内存和地址 程序视角看内存是一个大的字节数组&#xff0c;每个字节包含8个位&#xff0c;可以存储无符号值0至255,或有符号值-128至127。 多个字节可以合成一个字&#xff0c;许多机器以字为单位存储整数&#xff0c;每个字一般由2个或4个字节组成。 由于它们包含了更多的位&…...

paddle 分类网络

1.PaddlePaddlle强化学习及PARL框架 参考1 参考2 CPU版本安装 2.1 2.x版本安装 首先在anaconda下创建虚拟环境&#xff1a;可参考【1】Anaconda安装超简洁教程&#xff0c;瞬间学会&#xff01; 飞桨安装链接【开始使用_飞桨-源于产业实践的开源深度学习平台】 2 安装 con…...

计算机网络408考研 2022

https://zhuanlan.zhihu.com/p/695446866 1 1 1SDN代表软件定义网络。它是一种网络架构&#xff0c;旨在通过将网络控制平面从数据转发平面分离出来&#xff0c;从而实现网络的灵活性和可编程性。在SDN中&#xff0c;网络管理员可以通过集中式控制器 来动态管理网络流量&…...

2023级JavaScript与jQuery

第三课&#xff1a;JavaScript对象编程 一.预习笔记 1.Date对象 对象创建&#xff1a;var myDatenew Date() 输出显示当前日期的标准时间 对象创建&#xff1a;var myDatenew Date(“2024/09/14”) 对象创建&#xff1a;var myDatenew Date(2024,9,14) 当前对象创建时&…...

【C++】————IO流

作者主页&#xff1a; 作​​​​​​者主页 本篇博客专栏&#xff1a;C 创作时间 &#xff1a;2024年9月9日 一、C语言的输入和输出 C语言中我们用到的最频繁的输入输出方式就是 scanf() 和 printf()。 scanf()&#xff1a;从标准输入设备&#xff08;键盘&#xff09;读…...

ESP8266连接到Blinker平台

ESP8266是一款常见的物联网开发板&#xff0c;因其支持WIFI且性能强大&#xff0c;收到了各类电子爱好者的喜爱&#xff0c;Blinker是一个非常适合初学者的物联网开发平台&#xff0c;借助Arduino开发环境&#xff0c;二者之间进行巧妙配合&#xff0c;很容易便可以完成物联网的…...

qwen2 VL 多模态图文模型;图像、视频使用案例

参考&#xff1a; https://huggingface.co/Qwen/Qwen2-VL-2B-Instruct 模型&#xff1a; export HF_ENDPOINThttps://hf-mirror.comhuggingface-cli download --resume-download --local-dir-use-symlinks False Qwen/Qwen2-VL-2B-Instruct --local-dir qwen2-vl安装&#x…...

ASPICE评估:汽车软件质量的守护神

随着汽车行业的快速发展&#xff0c;车载软件系统的复杂性和重要性日益凸显。为了确保汽车软件的质量和安全性&#xff0c; 汽车行业引入了ASPICE&#xff08;Automotive SPICE&#xff09;评估作为评价软件开发团队研发能力的重要工具。 本文将详细介绍ASPICE评估的概念、过…...

野生动物检测系统源码分享

野生动物检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…...

【Hot100】LeetCode—75. 颜色分类

目录 1- 思路题目识别技巧 2- 实现⭐75. 颜色分类——题解思路 3- ACM 实现 原题链接&#xff1a;75. 颜色分类 1- 思路 题目识别 识别1 &#xff1a;给定三种类型数据&#xff0c;使得三种数据用一次遍历实现三种数据排序。 技巧 用两条线将数组分为三部分A 线左侧&#x…...

【物联网技术大作业】设计一个智能家居的应用场景

前言&#xff1a; 本人的物联网技术的期末大作业&#xff0c;希望对你有帮助。 目录 大作业设计题 &#xff08;1&#xff09;智能家居的概述。 &#xff08;2&#xff09;介绍智能家居应用。要求至少5个方面的应用&#xff0c;包括每个应用所采用的设备&#xff0c;性能&am…...

ESP8266做httpServer提示Header fields are too long for server to interpret

CONFIG_HTTP_BUF_SIZE512 CONFIG_HTTPD_MAX_REQ_HDR_LEN1024 CONFIG_HTTPD_MAX_URI_LEN512CONFIG_HTTPD_MAX_REQ_HDR_LEN由512改为1024...

jmeter设置全局token

1、创建setup线程&#xff0c;获取token的接口在所有线程中优先执行&#xff0c;确保后续线程可以拿到token 2、添加配置原件-Http信息头管理器&#xff0c;添加取样器-http请求 配置好接口路径&#xff0c;端口&#xff0c;前端传参数据&#xff0c;调试一下&#xff0c;保证获…...

DORIS - DORIS之索引简介

索引概述 索引对比 索引建议 &#xff08;1&#xff09;最频繁使用的过滤条件指定为 Key字段&#xff0c;自动建前缀索引&#xff0c;它的过滤效果最好&#xff0c;但是一个表只能有一个前缀索引&#xff0c;因此要用在最频繁的过滤条件上&#xff0c;前缀索引比较小&#xff…...

Java 串口通信—收发,监听数据(代码实现)

一、串口通信与串行通信的原理 串行通信是指仅用一根接收线和一根发送线&#xff0c;将数据以位进行依次传输的一种通讯方式&#xff0c;每一位数据占据一个固定的时间长度。 串口通信&#xff08;Serial Communications&#xff09;的概念非常简单&#xff0c;串口按位&#x…...

fileinput pdf编辑初始化预览

var $fileLinkInput $(#file_link_full); $fileLinkInput.fileinput({language: zh,uploadUrl: <?php echo Yii::$app->urlManager->createUrl([file/image, type > work_file]);?>,initialPreview: [defaultFile],initialPreviewAsData: true,initialPrevie…...

微信支付开发-需求整理及需求设计

一、客户要求 1、通过唤醒机器人参与答题项&#xff0c;机器人自动获取题目&#xff0c;用户进行答题&#xff1b; 2、用户答对题数与后台设置的一样或者更多&#xff0c;则提醒用户可以领取奖品&#xff0c;但是需要用户支付邮费&#xff1b; 3、用户在几天之内不能重复领取奖…...

vs code: pnpm : 无法加载文件 C:\Program Files\nodejs\pnpm.ps1,因为在此系统上禁止运行脚本

在visual studio code运行pnpm出错&#xff1a; pnpm : 无法加载文件 C:\Program Files\nodejs\pnpm.ps1&#xff0c;因为在此系统上禁止运行脚本 解决方案&#xff1a; 到C:\Program Files\nodejs文件夹下删除pnpm.ps1即可。 C:\Program Files\nodejs改成你自己的路径...

web测试必备技能:浏览器兼容性测试

如今&#xff0c;市面上的浏览器种类越来越多&#xff08;尤其是在平板和移动设备上&#xff09;&#xff0c;这就意味着你所测试的站点需要在这些你声称支持浏览器上都能很好的工作。 同时&#xff0c;主流浏览器&#xff08;IE&#xff0c;Firefox&#xff0c;Chrome&#x…...

《数据资产管理核心技术与应用》首次大型赠书活动圆满结束

《数据资产管理核心技术与应用》是清华大学出版社出版的一本图书&#xff0c;作者为张永清等著&#xff0c;在2024.9.11号晚上20:00&#xff0c;本书作者张永清联合锋哥聊数仓公众号和清华大学出版社一起&#xff0c;向各大大数据技术爱好者通过三轮互动活动赠送了3本正版图书。…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中&#xff0c;我们训练出的神经网络往往非常庞大&#xff08;比如像 ResNet、YOLOv8、Vision Transformer&#xff09;&#xff0c;虽然精度很高&#xff0c;但“太重”了&#xff0c;运行起来很慢&#xff0c;占用内存大&#xff0c;不适合部署到手机、摄…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…...

上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式

简介 在我的 QT/C 开发工作中&#xff0c;合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式&#xff1a;工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

快速排序算法改进:随机快排-荷兰国旗划分详解

随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...

针对药品仓库的效期管理问题,如何利用WMS系统“破局”

案例&#xff1a; 某医药分销企业&#xff0c;主要经营各类药品的批发与零售。由于药品的特殊性&#xff0c;效期管理至关重要&#xff0c;但该企业一直面临效期问题的困扰。在未使用WMS系统之前&#xff0c;其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...

node.js的初步学习

那什么是node.js呢&#xff1f; 和JavaScript又是什么关系呢&#xff1f; node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说&#xff0c; 需要在node.js的环境上进行当JavaScript作为前端开发语言来说&#xff0c;需要在浏览器的环境上进行 Node.js 可…...