C复习-指针
参考: 里科《C和指针》
指针存储的是一个地址,实际就是一个值。
如果像下面一样对未初始化的指针进行赋值,如果a的初始值是非法地址,那么会报错。UNIX会提示段错误segmentation violation,或内存错误memory fault,指程序试图访问一个未分配给程序的内存位置;如果windows的话一般是保护性异常General Protection Exception。如果a的初始值是合法地址,那可能更麻烦了,因此在对指针进行间接访问之前,必须确保已经初始化(或者是NULL)。
int *a;
...
*a = 12;
向函数传递指针前也要先检查是否为NULL。因为按标准,在函数里不检查,检查交给用户(创建时检查)。
指针的指针
int a = 12;
int *b = &a;
int **c = &b;
char ch = 'a';
char *cp = &ch;
| 表达式 | 值 | 说明 | 重要性 |
|---|---|---|---|
| *cp + 1 | ‘b’ | *的优先级高于+ | |
| *(cp + 1) | 这是非法的,ch后面的值未知 | ||
| ++cp | 非法,是找ch后面的值 | ||
| *++cp | 右值是ch后面的值,左值是ch后面那个位置 | ||
| *cp++ | 右值是ch的值,左值是ch的地址。但是cp移到下一个位置了。后缀++的优先级高于*,这里是1)++产生了cp的拷贝;2)++操作cp;3)在cp的拷贝上实现间接访问 | ⭐ | |
| ++*cp | ‘b’ | ++和*都是从右向左结合的,所以先间接访问。不能作为左值 | |
| (*cp)++ | ‘a’ | 因为先间接访问,所以计算的值就是’a’,随后ch的值+1变’b’ | |
| ++*++cp | 先后移指针,然后取值,再+1 | 很少见 | |
| ++*cp++ | 因为后缀++的优先级高,所以先移动cp,然后间接访问到ch,+1后ch=’b’,此时cp还是指向ch后一个位置 | 很少见 |
实例
size_t
strlen(char* string) {int length = 0;/** 如果string=null会报错,因为++自动移动,但是访问冲突* 这里不检查是否为null,是希望用户检查*/while ( *string++ != '\0'){length += 1;}return length;
}
指针算术加减
指针+1是移动到下一个位置,而非下一个字节。比如int要4个字节,那么int *ptr, ptr+1时实际移动了4个字节,并不是在指针内部移动。
指针减指针
只有在数组内有意义,得到的结果是ptrdiff_t类型,是一种有符号整数类型。这个结果除以数组类型的长度(比如float是4)就是坐标差。如果两个指针指向的元素不在同一数组,这个结果就是未定义的。大部分编译器也不会检查是不是在一个数组。
指针的关系运算
同样在数组中有意义,指< ≤ > ≥。虽然标准允许指向数组元素的指针,与数组最后一个元素后面的内存位置的指针比较,但是不允许它与指向index=0前一个位置的指针比较。不能保证移植性。
相关文章:
C复习-指针
参考: 里科《C和指针》 指针存储的是一个地址,实际就是一个值。 如果像下面一样对未初始化的指针进行赋值,如果a的初始值是非法地址,那么会报错。UNIX会提示段错误segmentation violation,或内存错误memory fault&…...
Runnable和Thread的区别,以及如何调用start()方法
Runnable和Thread都是Java多线程编程中的核心概念,它们之间存在以下主要差异: Runnable是一个接口,而Thread是一个类。这意味着我们可以通过实现Runnable接口来创建线程,或者直接继承Thread类并重写其方法。Runnable只包含一个ru…...
云音乐Android Cronet接入实践
背景 网易云音乐产品线终端类型广泛,除了移动端(IOS/安卓)之外,还有PC、MAC、Iot多终端等等。移动端由于上线时间早,用户基数大,沉淀了一些端侧相对比较稳定的网络策略和网络基础能力。然而由于各端在基础…...
Linux dup和dup2
Linux dup和dup2函数,他们有什么区别,什么场景下会用到,使用它们有什么注意事项 dup和dup2都是Linux系统中的系统调用,用于复制文件描述符。它们的主要区别在于如何指定新的文件描述符以及处理新文件描述符的方式。 dup函数 #i…...
Spring Boot实战 | 如何整合高性能数据库连接池HikariCP
专栏集锦,大佬们可以收藏以备不时之需 Spring Cloud实战专栏:https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏:https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏:https:/…...
Spring依赖注入
依赖注入底层原理流程图: https://www.processon.com/view/link/5f899fa5f346fb06e1d8f570 Spring中有两种依赖注入的方式 首先分两种: 手动注入自动注入 手动注入 在XML中定义Bean时,就是手动注入,因为是程序员手动给某个属…...
Linux下Jenkins自动化部署SpringBoot应用
Linux下Jenkins自动化部署SpringBoot应用 1、 Jenkins介绍 官方网址:https://www.jenkins.io/ 2、安装Jenkins 2.1 centos下命令行安装 访问官方,点击文档: 点击 Installing Jenkins: 点击 Linux: 选择 Red Hat/…...
【git 学习】--- ubuntu18.04 搭建本地git服务器
在Ubuntu18.04 上简单创建自己的git服务器~ 环境配置 Ubuntu: 18.04git服务器搭建步骤: ##1.安装git sudo apt-get install git##2.添加用户 sudo adduser test_git //test_git -- git用户名##3. 在Git用户的home目录下创建文件夹,作为裸仓库 sudo…...
JAVA电商平台免费搭建 B2B2C商城系统 多用户商城系统 直播带货 新零售商城 o2o商城 电子商务 拼团商城 分销商城
涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis …...
Android 13 Framework 裁剪
裁剪应用 1. 修改 build/core/product.mk 添加PRODUCT_DEL_PACKAGES变量的声明 新增一行_product_single_value_vars PRODUCT_DEL_PACKAGES # The first API level this product shipped with _product_single_value_vars PRODUCT_SHIPPING_API_LEVEL _product_single_val…...
【Axios封装示例Vue2】
文章目录 为什么要封装axios?如何封装axios在Vue组件中使用封装的axios 为什么要封装axios? 在Vue 2项目中,直接在组件中使用axios可能会导致以下问题: 代码重复:每个组件都需要导入axios并编写相似的请求代码&#…...
k8s-----20、持久化存储--PV/PVC
PV/PVC 1、概念1.1 基本定义1.2 生命周期1.3 PV 卷阶段状态 2、 示例2.1 创建pod和PVC 与PV2.2 绑定PV2.3 强制删除pv,pvc2.4 测试 1、概念 1.1 基本定义 PersistentVolume(PV)是集群中由管理员配置的一段网络存储。 它是集群中的资源,就像…...
python matplotlib 生成矢量图
import matplotlib.pyplot as plt plt.savefig(r"xxx.svg", format"svg")注意: plt.savefig(r"xxx.svg", format"svg") 需要放在 plt.show()前面 原因:如果在 plt.show()调用后, 实际上已经创建了一…...
机器学习中常见的特征工程处理
一、特征工程 特征工程(Feature Engineering)对特征进行进一步分析,并对数据进行处理。 常见的特征工程包括:异常值处理、缺失值处理、数据分桶、特征处理、特征构造、特征筛选及降维等。 1、异常值处理 具体实现 from scipy.s…...
Spring IOC 和 AOP
核心概念 咱们这节就讲完了,在这节中我们讲了两个大概念,一个叫做IOC,一个叫做DI IOC是什么?是用对象的时候不要自己用new而是由外部提供,而spring在进行实现的时候是谁提供,就是IOC容器给你提供。 DI是什…...
echarts插件-liquidFill(水球图)
echarts插件-liquidFill(水球图) 1.下载2.引入:3.使用 1.下载 echarts.js下载:https://cdnjs.com/libraries/echarts echarts-liquidfill.js下载:https://github.com/ecomfe/echarts-liquidfill 2.引入: …...
c++ vscode cmake debug for mac
1. 下载vscode 2. 安装c插件 参考:C programming with Visual Studio Code 3. 安装llvm,可以使用brew安装 4. 配置llvm到系统环境变量中 5. 编写c代码 6. 编写CMakeLists.txt文件(前提安装cmake) cmake_minimum_required(V…...
17 结构型模式-享元模式
1 享元模式介绍 2 享元模式原理 3 享元模式实现 抽象享元类可以是一个接口也可以是一个抽象类,作为所有享元类的公共父类, 主要作用是提高系统的可扩展性. //* 抽象享元类 public abstract class Flyweight {public abstract void operation(String extrinsicState); }具体享…...
创建Secret(手动)
和创建其他类型的 API 对象(Pod、Deployment、StatefulSet、ConfigMap 等)一样,您也可以先在 yaml 文件中定义好 Secret,然后通过 kubectl apply -f 命令创建。此时,您可以通过如下两种方式在 yaml 文件中定义 Secret&…...
基于PHP的线上购物商城,MySQL数据库,PHPstudy,原生PHP,前台用户+后台管理,完美运行,有一万五千字论文。
目录 演示视频 基本介绍 论文截图 功能结构 系统截图 演示视频 基本介绍 基于PHP的线上购物商城,MySQL数据库,PHPstudy,原生PHP,前台用户后台管理,完美运行,有一万五千字论文。 现如今,购物网站是商业…...
实战指南:Autofac 依赖注入在微服务架构中的高效应用
1. Autofac在微服务架构中的核心价值 微服务架构最大的挑战之一就是如何优雅地管理数百个服务的依赖关系。我经历过一个电商系统重构项目,当单体应用拆分成30多个微服务后,手工管理服务依赖就像在玩多米诺骨牌——改一个服务参数可能引发连锁反应。这时候…...
深入探索Verilog-mode的AUTO功能:提升Verilog/SystemVerilog编码效率
1. Verilog-mode与AUTO功能初探 如果你经常用Verilog或SystemVerilog做数字设计,肯定遇到过这些烦恼:手动实例化模块时要反复核对端口列表、修改信号名后得同步更新十几处连线、敏感信号列表漏写导致仿真异常...这些问题在大型项目中尤为明显。而Emacs的…...
Halcon拼图算子tile_images_offset实战:从图像裁切到精准拼接
1. 认识tile_images_offset算子 第一次接触Halcon的tile_images_offset算子时,我正面临一个棘手的工业检测项目。客户需要将多个摄像头拍摄的电路板局部图像拼接成完整视图,传统手动拼接方式效率低下且误差大。这个算子就像及时雨,完美解决了…...
2026-04随笔记
2026-04-01因为前天工作卡住了,导致昨天没心情研究,一度以为我不适合这个工作,早上的时候回想了一下成功和失败的场景认真做对比细心分析发现一个 LoadBalance的ip没设置,虽然自动获取了,但是helm的其他地方也用了这个…...
快速验证dify部署方案:用快马生成环境检查与部署脚本原型
最近在折腾dify的本地部署,发现环境配置这块特别容易踩坑。作为一个开源AI应用开发平台,dify的部署涉及Python版本、Docker环境、端口占用等一系列依赖项检查,手动操作既繁琐又容易遗漏步骤。正好发现InsCode(快马)平台能快速生成这类工具的原…...
如何提高YOLO8目标检测的准确性?
上面主要就是大致了解方法,省流请看最下面1.提高置信度阈值yolo predict modelyolov8n.pt source0 classes0 conf0.5 conf0.3(灵敏,但容易误检) conf0.5(更准,误检少) …...
IDM注册表权限控制技术深度解析:突破30天试用期的终极方案
IDM注册表权限控制技术深度解析:突破30天试用期的终极方案 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script 核心技术原理:Windows注册表权…...
mysql进阶--锁
锁的概述: 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问…...
模型蒸馏与量化:为什么大厂急需能把大模型跑在边缘端的SDE?
在2026年的北美科技求职市场中,人工智能的下半场战役已经悄然转移了阵地。当行业内绝大多数求职者还在简历上堆砌“熟练调用大语言模型API”或“基于LangChain构建应用”时,北美头部科技公司(如Apple、Google、Meta)的招聘重心已经…...
SIP系列四:SIP消息格式实战解析与调试指南
1. SIP消息格式深度拆解:从理论到抓包实战 第一次用Wireshark抓取SIP消息时,我被满屏的Header字段搞得头晕眼花。直到后来才发现,这些看似复杂的文本背后藏着精妙的设计逻辑。我们先从最基础的SIP消息结构说起——它就像快递包裹的运单&…...
