再学C语言38:指针操作
C提供了6种基本的指针操作
示例代码:
#include <stdio.h>int main(void)
{int arr[5] = {1, 2, 3, 4, 5};int * p1, *p2, *p3;p1 = arr; // 把一个地址赋给指针p2 = &arr[2]; // 把一个地址赋给指针printf("指针指向的地址,指针指向地址中存储的内容,指针本身的地址:\n");printf("p1 = %p, *p1 = %d, &p1 = %p\n", p1, *p1, &p1);// 指针加法printf("\n");p3 = p1 + 4;printf("增加指针值:\n");printf("p1 + 4 = %p, *(p1 + 4) = %d\n", p3, *p3);// 递增指针printf("\n");p1++;printf("p1递增后的值:\n");printf("p1 = %p, *p1 = %d, &p1 = %p\n", p1, *p1, &p1);// 递减指针printf("\n");p2--;printf("p2递减后的值:\n");printf("p2 = %p, *p2 = %d, &p2 = %p\n", p2, *p2, &p2);// p1和p2恢复为初始值printf("\n");--p1;++p2;printf("恢复为初始值后:\n");printf("p1 = %p, p2 = %p\n", p1, p2);// 一个指针减去另一个指针printf("\n");printf("指针2减指针1:\n");printf("p2 = %p, p1 = %p, p2 - p1 = %p\n", p2, p1, p2 - p1);// 一个指针减去一个整数printf("\n");printf("指针3减一个整数:\n");printf("p3 = %p, p3 - 2 = %p\n", p3, p3 - 2);return 0;
}
运行结果:

可以对指针变量执行的基本操作:
1)赋值:可以把一个地址赋给指针
通常使用数组名或地址运算符&进行地址赋值
2)求值或取值:使用预算符*可取出指针指向地址中存储的数值
3)取指针地址:指针变量同其他变量一样具有地址和数值,使用运算符&可以得到存储指针本身的地址
4)将一个整数加给指针:可以使用+运算符把一个整数加给指针,或者把一个指针加给一个整数
整数会和指针所指类型的字节数相乘,所得结果加到初始地址上
如果相加的结果超出了初始指针所指向的数组的范围,则会出现不确定结果
5)增加指针的值:通过加法或增量运算符
对指向某数组元素的指针做增量运算,会让指针指向该数组的下一个元素
6)从指针中减去一个数:可以使用-运算符从一个指针中减去一个整数,与将一个整数加给指针类似
7)减小指针的值:与增加指针的值类似
8)求差值:求出两个指针之间的差值
通常对分别指向同一数组内两个元素的指针求差值,获得元素之间的距离
差值的单位是相应类型的大小(如2个int的大小)
9)比较:使用关系运算符比较两个指针的值,前提是两个指针具有相同的类型
两种形式的减法:可以用一个指针减掉另一个指针得到一个整数;也可以从一个指针中减去一个整数得到一个指针
计算机不检查指针是否仍然指向某个数组元素;C保证指向数组元素的指针和指向数组后的第一个地址的指针都是有效的;如果指针在进行了增量或减量运算后超出了这个范围,后果将是未知的
可以对指向一个数组元素的指针进行取值运算,但不能对指向数组后的第一个地址的指针进行取值运算,尽管这样的指针是合法的
不要对未初始化的指针取值:
int *p; // 一个未初始化的指针
*p = 5; // 一个危害极大的赋值// 把数值5存储在p所指向的地址// 由于p没有被初始化,因此其值是随机的,不知道数值5会被存储到什么位置// 这个位置也许对系统危害不大// 但是也许会覆盖已有的程序数据或代码,甚至导致程序崩溃
当创建一个指针时,系统只分配了用于存储指针本身的内存空间,并不分配用于存储数据的内存空间
因此在使用指针之前,必须给其赋予一个已分配的内存地址,例如可以把一个已存在的变量地址赋给指针,或者使用函数malloc()函数分配内存
使用指针时一定要小心
指针的2个基本功能:
1)指针最基本的功能在于同函数交换信息;如果需要让被调函数修改调用函数中的变量,就必须使用指针
2)指针的另一个基本功能是用于处理数组的函数中
相关文章:
再学C语言38:指针操作
C提供了6种基本的指针操作 示例代码: #include <stdio.h>int main(void) {int arr[5] {1, 2, 3, 4, 5};int * p1, *p2, *p3;p1 arr; // 把一个地址赋给指针p2 &arr[2]; // 把一个地址赋给指针printf("指针指向的地址,指针指向地址中…...
【论文Word排版】使用多级列表设置论文序号
在Word中对论文进行排版 1.设置章节前面的序号 1.1 需求 通常情况下要求如下 一级标题“第一章 XXX”,然后是“1.1 研究意义”, “1.2 研究现状” 之前的处理方式都是手打,并没有借助word的多级列表实现。这次趁着写毕业论文研究了一下。…...
分支管理方案
背景 在工作的过程中,git管理方式已经成为每一个项目开发的基础,每个项目的开发都离不开git管理方式。 但是在使用的过程中,由于对git分支管理方案的了解不深,导致会出现分支管理不明确的情况。 本文主要是做科普作用ÿ…...
Allegro走线时如何自动关闭其它网络飞线显示操作指导
Allegro走线时如何自动关闭其它网络飞线显示操作指导 在做PCB设计的时候,尤其是在评估布线的时候,走某一个网络的时候,希望其它网络的飞线会被自动关闭,方便评估。 Allegro支持这个功能,如下图 走线前 走线后 具体操作如下 点击Route...
Linux中常用命令汇总二
Linux中常用命令汇总一文章地址:https://blog.csdn.net/u011837804/article/details/1289952531、时间日期类基本语法date [OPTION]... [FORMAT]选项说明选项说明-d<时间字符串>显示指定的“时间字符串”表示的时间,而非当前时间-s<日期时间>…...
【数据结构】排序算法
目录 1.理解排序 1.1 排序的概念 1.2 排序的运用场景 1.3 常见的排序算法 2.插入排序算法 2.1 直接插入排序 2.2 希尔排序 3.选择排序算法 3.1 直接选择排序 3.2 堆排序 4.交换排序算法 4.1 冒泡排序 4.2 快速排序 4.2.1 hoare 法 4.2.2 挖坑法 4.2.3 前…...
[MySQL]初识数据库
哈喽,大家好!我是保护小周ღ,本期为大家带来的是 MySQL 数据库,也是新的知识,首先我们会初步认识什么是数据库,什么是Mysql 数据库,以及我们 mysql 主要学什么,SQL 语句简单使用&…...
XXL-JOB分布式任务调度框架(二)-路由策略
文章目录1.引言2.任务详解2.1.执行器2.2.基础配置3.路由策略(第一个)-案例4.路由策略(最后一个)-案例5.轮询策略-案例7.分片广播任务1.引言 本篇文章承接上文《XXL-JOB分布式任务调度框架(一)-基础入门》,上一次和大家简单介绍了下 xxl-job 的由来以及使用方法&…...
Java_Maven:5. 把第三方 jar 包放入本地仓库或私服
目录 1 导入本地库 2 导入私服 3 参数说明 1 导入本地库 随便找一个 jar 包测试,可以先 CMD进入到 jar 包所在位置,运行 mvn install:install-file -DgroupIdcom.alibaba -DartifactIdfastjson -Dversion1.1.37-Dfile fastjson-1.1.37.jar -Dpackaging…...
【剑指offer】03~05. 数组中的数字(C# 实现)
文章目录前言03. 数组中重复的数字04. 二维数组中的查找05. 替换空格结语前言 😃 大家好,我是writer桑,这是自己整理的 C# 做题记录,方便自己学习的同时分享出来,感谢支持。 03. 数组中重复的数字 题目描述࿱…...
Docker入门教程
文章目录一、Docker概述1. 什么是容器技术?2. 什么是Docker3. 为什么要使用Docker4. Docker和虚拟机的对比5. Docker相关概念6. DockerHub7. Docker架构二、安装Docker1. 安装Docker2. 配置阿里云镜像加速三、Docker常用命令1. 帮助命令2. 镜像操作命令3. 容器操作命…...
I2C总线应用测试程序
参考链接:I2c协议 Linux I2C应用编程开发 问题背景 在工作中需要测试I2C总线的传输稳定性,需写一个测试程序通过读写从设备寄存器的值来验证数据传输稳定性。 站在cpu的角度来看,操作I2C外设实际上就是通过控制cpu中挂载该I2C外设的I2C控制…...
主从表的建立
//表查--病害id--主从表public static DataSet QueryGetQlgjDispdbdisidTABbyqidZC(string qid, string bwname){string SQLStringZ "select * from tl_qlsoft_cql_qlcheck_qlstye_bw a, tl_qlsoft_cql_qlcheck_qlstye_bw_gj b where a.chbwidb.chbwid and a.qli…...
Exporter介绍与指标数据,规范说明(更新中)
1.exporter是什么广义上讲所有可以向Prometheus提供监控样本数据的程序都可以被称为一个Exporter。而Exporter的一个实例称为target,如下所示,Prometheus通过轮询的方式定期从这些target中获取样本数据:2.exporter的来源与分类从Exporter的来源上来讲&am…...
[Android Studio] Android Studio Virtual Device虚拟机的功能试用
🟧🟨🟩🟦🟪 Android Debug🟧🟨🟩🟦🟪 Topic 发布安卓学习过程中遇到问题解决过程,希望我的解决方案可以对小伙伴们有帮助。 🚀write…...
华为OD机试 - 检查数组中是否存在满足规则的数组组合1(Python)
检查数组中是否存在满足规则的数组组合1 题目 给定一个正整数数组 检查数组中是否存在满足规则的数组组合 规则: A = B + 2C 输入 第一行输出数组的元素个数 接下来一行输出所有数组元素,用空格隔开 输出 如果存在满足要求的数 在同一行里依次输出规则里A B C的取值,用…...
深圳“托育”放大招!政府出钱帮你带娃啦!
工作忙得不可开交 难以照料孩子的起居 这个带娃难题常常让双职工家庭 感觉到头疼不已 一边是工作,一边是孩子 父母都上班,宝宝谁来带? 未来这个问题将迎刃而解! 因为政府要出钱帮你带娃啦! 近日,深圳市总工…...
服务间调用方式 OpenFeign 的介绍和使用
文章目录前言1、 RestTemplate1.1、通用方法 exchange1.2、RestTemplate 和 OpenFeign 的区别2、RPC 和 HTTP2.1、RPC 是什么2.2、RPC 调用过程示意图2.3、HTTP 是什么2.4、HTTP 调用过程示意图2.5、对比3 、OpenFeign3.1 、OpenFeign 常用注解3.2 、案例前言 Feign 停更了&am…...
从开始测试到年薪40W,我的自动化测试艰辛历程
我希望我的故事能够激励现在的软件测试人,尤其是还坚持在做“点点点”的测试人。 你可能会有疑问:“我也能做到这一点的可能性有多大?”因此,我会尽量把自己做决定和思考的过程讲得更具体一些,并尽量体现更多细节。 …...
《C++ Primer Plus》第17章:输入、输出和文件(1)
对C输入和输出(简称I/O)的讨论提出了一个问题。一方面,几乎每个程序都要使用输入和输出,因此了解如何使用它们是每个学习计算机语言的人面临的首要任务;另一方面,C使用了很多较为高级的语言特性来实现输入和…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
