1.28——指针

用微雪RP2040-LCD-1.28设计一款模拟电子表,带屏PICO应用 微雪RP2040-LCD-1.28 是一款国内创新设计的PICO微控制器开发板,其在较小的板型情况下,板载了1.28inch LCD、锂电池充电芯片、六轴传感器(三轴加速度与三轴陀螺仪)等外设。 阅读详情

1.野指针可能带来哪些后果?

野指针,即指向一个错误位置的指针,如果你的程序中有野指针,你的数据就危险了。存放在堆中的数据可能会被破坏,用来处理堆的数据结构也可能被破坏,甚至操作系统的数据也可能被修改,甚至有时上述三种破坏情况同时发生。

此后可能发生的事情取决与这样两点:第一,内存中的数据被破坏的程度有多大;第二,内存中的被破坏的部分还要被使用多少次。在有些情况下,一些函数将立即无法正常工作;在另一些情况下,程序会终止并报告一条出错消息,或者程序可能会挂起,或者程序可能会陷入死循环,或者程序可能会产生错误的结果,或者程序看上去仍然正常运行,因为程序没遭到本质的破坏。

 

2.常量指针与指针常量

 

(1) const char *p;
(2) char* const p;
(3) char *p = "abc";

语句(1)第一了一个常量指针,即指向一个常量的指针,指向的内容是常量,不可以修改,放在常量区的,但指针本身可以修改,即“*p=‘b’”是非法的,*p是p指向的常量的第一个字符,是个常量,不能改变的。“p=&q”这是可以的,指针可以指向不同的地址。

语句(2)定义了一个指针常量,即指针本身是个常量,不可修改,但指针指向的内容可以修改,一开始定义时让它指向数组a,“*p=‘b’”这是可一个,但“p=&b”是非法的。

const常量*指针,当const在*之前就是常量指针,而const在*之后就是指针常量。例如“const char*p”即char*p是个常量,所以内容是常量;“char* const p;”即指针p是个常量。

语句(3)中“char *p”定义的是一个指针变量p,指向字符串abc首地址。这里特别要注意,在C语言中,(3)中定义的是一个常量字符串,它被放在静态存储区的常量区存储,而p是一个指针变量,放在栈上。如果“*p=‘b’”在编译时能通过,但在运行时就会出现错误,因为你识图去改变常量区的内容。

 

3.空指针的三种用法

(1)用空指针终止对递归数据结构的间接引用。

(2)用空指针进行函数调用失败时的返回值。

(3)用空指针作警戒值。

 

4.指针数组和数组指针

指针数组“typename *p[n]”定义了一个数组,数组包含了n个指针变量p[0],p[1],…,p[n-1]。符合一般数组的特性,除了数组中的元素是指针以外,和一般的数组没什么区别。数组名p是个指针常量,不能直接进行指针运算,不过可以传递给函数来进行。可以通过“p[x]”来对指针数组进行赋值,如“p[2] = "hijklm";”,否则,对数组中的每个指针进行初始化,必须先分配p[x]锁指向的内存空间!必须对分配结果进行判断。

指向数组的指针(以二维数组为例),二维数组“int[2][4]”,可以看作有两个num[4]的数组构成,数组名指向第一个元素,num[0]指向{num[0][0],num[0][1],,,num[0][3]},num=num[0]=&num[0][0];num+1=num[1]=&num[1][0];二维数组名可以看做一个指向指针数组的指针。

 

5.指针函数和函数指针

(1)函数指针:即指向这个函数的指针,定义为“数据类型(*fun)(参数列表);”,()的优先级比*高,所以*fun加括号,如"void (*fun)(int *,int*);";

(2)指针函数:即返回值是指针的函数,定义为“数据类型 *fun(参数列表);”,如“char *fun(int*, int*);”,即返回值为char* 型。

 

6.指针函数的返回值问题

当函数的返回值为指针类型时,应该尽量不要返回局部变量的指针,因为局部变量是定义在函数内部,当这个函数调用结束了,局部变量的栈内存也被释放了,因此不能够正确地得到返回值。实际上,内存已经被释放了,但这个指针的地址已经返回过去了,但是这个地址已经是无效的了,此时,对这个指针的使用是很危险的。

 

7.左右法则

右左法则:首先从最里面的圆括号内未定义的标识符开始阅读看起,然后往右看,再往左看。每当遇到圆括号时,就应该掉转阅读方向。一旦解析完圆括号里面所有的东西,就跳出圆括号。重复这个过程直到整个声明解析完毕。

在通过复杂例子解析左右结构之前,我先说一下指针数组嵌套中的一些基本类型

1.int a;  整形变量
2.int *a; 整形指针变量 
3.int **a; 整形指针的指针变量(一个指向指针的指针,它指向的指针指向一个整形数)
4.int a[10];  整形数组
5.int  *a[10]; 整形指针数组(一个数组中有10个指针,该指针指向一个整形数)
6.int (*a)[10]; 整形数组指针(一个指向有10个整形数组的指针)
7.int (*a)(int); 函数指针变量(一个指向函数的指针,该函数有一个整形参数并返回一个整形数)
8.int (*a[10])(int); 函数指针数组(一个有10个指针的数组,该指针指向一个函数,该函数有一个整形参数并返回一个整形数)

介绍完一些基本类型,下面来介绍一些复杂的例子

1.int *( * ( *fpl ) ( int ) ) [10];
--*fpl   知道fpl是一个指针
--*(*fpl)(int)  知道指针fpl指向一个形参为int,返回值为指针的函数
--int *(*(*fpl)(int))[10]  知道该函数的指针指向一个数组,该数组有10个元素,并且每个元素指向一个整数

总结:fpl被声明为一个函数的指针,该函数返回值是一个指向指针数组的指针。

8.字符串函数

 

1. strcpy

原型:char *strcpy (char * __dest, const char * __src); 
功能:将一个字符串(__src)拷贝到另一个字符串缓冲区中(__dest),并返回拷贝后的字符串指针; 

2. strncpy

原型:char *strncpy (char * __dest, const char *__src, size_t __n); 
功能:将一个字符串(__src)拷贝到另一个字符串缓冲区中(__dest),拷贝最多不超过__n字节,并返回拷贝后的字符串指针;

3. strcat

原型:char *strcat (char *__dest, const char *__src); 
功能:将一个字符串(__src)拼接到另一个字符串缓冲区中(__dest),并返回拼接后的字符串指针;

4. strncat

原型:char *strncat (char *__dest, const char *__src, size_t __n); 
功能:将一个字符串(__src)拼接到另一个字符串缓冲区中(__dest),最多不超过__n个字节,并返回拼接后的字符串指针

5. strlen

原型:size_t strlen (const char *__s); 
功能:返回一个字符串(__src)的长度,即字节(符)数,这里仅考虑ASCII字符;

6. strcmp

原型: int strcmp (const char *__s1, const char *__s2); 
功能:比较字符串__s1和字符串__s2,返回比较结果,如果相等,则返回0; 
比较方式:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止; 
返回结果:当s1<s2时,返回值<0;当s1=s2时,返回值=0;当s1>s2时,返回值>0; 

7. strncmp

原型: int strncmp (const char *__s1, const char *__s2, size_t __n); 
功能:比较字符串__s1和字符串__s2的__n个字符,返回比较结果,如果相等,则返回0; 
比较方式:同strcmp; 
返回结果:同strcmp; 

8. strcasecmp

原型: int strcasecmp (const char *__s1, const char *__s2); 
功能:比较字符串__s1和字符串__s2,忽略大小写的比较,返回比较结果,如果相等,则返回0; 

9. strncasecmp

原型: int strncasecmp (const char *__s1, const char *__s2, size_t __n); 
功能:比较字符串__s1和字符串__s2的__n个字符,忽略大小写的比较,返回比较结果,如果相等,则返回0; 

9.万能指针void

void指针一般成为通用指针或泛指针,它是C语言关于“纯粹地址”的一种约定。void指针指向某个对象,但该对象不属于任何类型。在C语言中,任何时候都可以用其他类型的指针来代替void指针,或者用void指针来代替其他类型的指针,并且不要进行强制类型转换。当进行纯粹的内存操作时,或者传递一个未定类型的指针时,可以使用void指针。void指针也经常用作函数指针。
 
10.NULL终是被定义为0吗,总是等于0吗?
NULL不是被定义为0,就是被定义为(void *)0,这两种值几乎是相同的。当程序中需要一个指针是(尽管编译程序并不是总能只是什么时候需要一个指针),一个纯粹的0和或一个void指针都能自动被转换成所需的任何类型的指针。
假如是指“与比较的结果为相等”,那么NULL确实再试等于0,这也就是空指针定义的本质所在。假如是指“其存储方式和整形值相同”,那么答案是不。NULL并不必须被存为一个整形值0,尽管这是NULL最常见的存储方式。在有些计算机中,NULL会被存成另外一些形式。
【花雕学编程】Arduino动手做(249)---ESP32 1.28寸 TFT GC9A01屏幕之模拟指针式钟表 37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。通过 drawHand() 绘制时针、分针和秒针,模拟指针的动态运动。时针为红色、分针为白色、秒针为蓝色,方便区分每个指针的功能。屏幕中央显示一个模拟的指针式钟表,时针、分针和秒针动态更新。 阅读详情

相关推荐

【花雕学编程】Arduino动手做(249)---ESP32 1.28寸 TFT GC9A01屏幕之模拟手表时钟指针、数字时间显示、日期窗口和装饰性刻度

鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。引入 Adafruit_GC9A01A 库,专用于驱动 GC9A01A 圆形屏幕,提供绘制圆形、线条、文字等能力。绘制两个同心圆,形成表盘外圈,分别使用白色和青色,增加美感。清除上一帧内容,绘制表盘、指针和数字时间,并更新时间。表盘中央模拟指针式时钟,刻度和指针分明,色彩丰富。

雕爷学编程 1127

c语言之左右法则

C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。 什么是左右法则呢?下面我会通过定义与一些例子尽量给大家讲解一下,希望对大家有所帮助。 右左法则:首先从最里面的圆括号内未定义的标识符开始阅读看起,然后往右看,再往左看。每当遇到圆括号时,就应该掉转阅读方向。一旦解析完圆括号里面所有的东西,就跳出圆括号。重复这个过程直到整个声明解析完毕

fighting_kangle的博客 1534

完全图公式 非连通无向图有28条边,至少有多少顶点 一个链式队列的队头和队尾指针分别为f和r,则判断队空的条件为 在用单链表表示的链式队列Q中

目录 完全图公式 非连通无向图有28条边,至少有多少顶点 一个链式队列的队头和队尾指针分别为f和r,则判断队空的条件为 在用单链表表示的链式队列Q中 完全图公式 n个端点的完全图有n个端点以及n(n − 1) / 2条边,以Kn表示 例题: 非连通无向图有28条边,至少有多少顶点 8个点全联通27 ,加上一个孤立点; 所以28条边的非连通无向图为9个(加入一个孤立点) 一个链式队列的队头和队尾指针分别为f和r,则判断队空的条件为 A.f!=NULL B.r!=NULL C.f==NU

ZhangJiqun&191cm&85kg 4922

C语言指针(test_1_28)

C语言指针(test_1_28)test_1_28_2add。C语言指针(test_1_28)

do_yo的博客 359

Vue3结合vue-office实现Word文档上传与预览全流程解析

本文详细解析了如何在Vue3项目中集成vue-office插件实现Word文档上传与预览功能。从项目初始化、插件安装到文件上传处理(包括ArrayBuffer转换)、预览优化及常见问题解决方案,提供了一套完整的实现流程,帮助开发者快速实现高效的文档预览功能。

weixin_29001327的博客 464

瑞芯微RK3506开发板Ethercat主站性能优化实战:从内核配置到微秒级延迟控制

本文详细介绍了在瑞芯微RK3506开发板上实现EtherCAT主站微秒级延迟控制的实战优化方案。核心在于部署Preempt-RT实时内核,并进行深度系统调优,包括CPU隔离、中断亲和性设置、内存锁定及电源管理调整。通过绕过Linux网络栈的专用驱动加载与配置,最终实现了稳定的高性能实时控制,满足工业自动化需求。

tcp8optimizer的博客 315

P28指针初阶1

指针就是变量,用来存放地址的变量。(存放在指针中的值都被当成地址处理)。那这里的问题是︰一个小的单元到底是多大?( 1个字节)如何编址?经过仔细的计算和权衡我们发现一个字节给一个对应的地址是比较合适的。对于32位的机器,假设有32根地址线,那么假设每根地址线在寻址的是产生一个电信号正电/负电(1或者0)那么32根地址线产生的地址就会是︰这里就有2的32次方个地址。每个地址标识一个字节,那我们就可以给(232Byte232/1024KB。

安全小白,希望我的文章对你有所帮助。 437

CDO批量处理nc文件:5分钟搞定CMIP6数据双线性插值(附完整代码)

本文详细介绍了如何使用CDO工具链中的`remapbil`命令,快速实现CMIP6数据的批量双线性插值处理。通过环境配置、核心操作步骤、高级优化技巧及典型报错解决方案,帮助科研人员高效处理大规模nc文件,显著提升气象数据处理效率。

weixin_29267307的博客 292

【3-1-28】void类型指针和空指针详解

1:void 指针声明 void main300() { char ch = 'A'; int num = 100; double db = 10.9; //错误如下,因为*p不明确从地址开始,前进几个字节,所以出错 /*void *p; p = &ch; p = &num; p = &db; *p = 10; printf("%d",*p);*/ //正确如下 voi

qq_36813267的博客 414

Sentence-BERT 语义相似度双塔模型

论文介绍 发表:2019,EMNLP 论文题目:《Sentence-BERT:sentence embeddings using siaese BERT-networks》 论文地址:https://arxiv.org/abs/1908.10084 Github:https://github.com/UKPLab/sentence-transformers 适用领域: 句向量生成 语义相似度计算 语义搜索 无监督任务(聚类) 1 概述 在20年之前的各种预训练模型中,比如bert,XLNet,Alb

weiyaner的博客 9194

图形学基础|球谐光照(Spherical Harmonics Lighting)

球谐光照(Spherical Harmonics Lighting) 文章目录球谐光照(Spherical Harmonics Lighting)一、前言二、球谐函数2.1 基函数2.2 投影与重建2.3 应用三、漫反射环境光3.1 IrradianceMap3.2 数学推导3.3 实践参考博文 一、前言 在学习图形渲染的过程中,一直對球谐函数(球谐光照)有一点了解,但没有亲手实现过。 关于球谐函数的数学概念是比较复杂的,笔者也实在无法完全理解,这篇文章只能从做东西的角度来说,公式是如何和代码进行对应的。

【黑键】 1万+

【28】C语言 | 关于指针练习(1)

C语言 | 关于指针练习 sizeof计算出的是一个unsigned数,当与有符号数-1比较的时候,-1会被看作一个无符号的数,-1在内存中存放的数是一个很大的数(32个1),所以>水仙花数”是指一个n位数,其各山数子的n次方之和于该数本身,如:153=1^3+5^3+ 3^3,则153是一个。求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字。1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水 (编程实现)。。

强哥的微博 721

【图像去噪】论文复现:灵感源自MAE!进一步解决BSN的局限性,破坏真实噪声的空间相关性!AMSNet的Pytorch源码复现,跑通源码,原理详解!

论文题目:Asymmetric Mask Scheme for Self-Supervised Real Image Denoising —— 自监督真实图像去噪的非对称掩码方案【图像去噪】论文精读:Asymmetric Mask Scheme for Self-Supervised Real Image Denoising(AMSNet)AMSNet是基于PyTorch Lightning CLI深度学习框架编写的,比较适合复杂的大型任务,复用很方便,但是安装和环境配置问题太多。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 546

C高级(1/28)作业(C 语言指针练习题)

17.若有定义:int a[]={2,4,6,8,10,12},*p=a;20.若有以下定义:int a[2][3]={2,4,6,8,10,12};14.设已有定义: int a[10]={15,12,7,31,47,20,16,28,13,19},*p;44、若有以下定义,且 0≤i<4,则不正确的赋值语句是__ __. int b[4][6], *p, *q[4];2.若有语句 int *point,a=4;

m0_70797007的博客 1284

YOLOv11 改进入门篇 | 从原理到代码:CBAM 注意力模块的插入与涨点验证

本文介绍了如何在YOLOv11模型中插入CBAM注意力模块以提升检测性能。CBAM包含通道和空间注意力两个子模块,通过双池化操作和MLP学习特征权重。文章详细解析了CBAM原理,提供了PyTorch实现代码,并建议在YOLOv11的Stage-3和Stage-4之间插入CBAM。实验表明,该方法在COCO数据集上使nano和small模型的mAP提升1.7-2.3个百分点,参数量仅增加0.27%,推理延迟增加0.1ms。最后给出了插入位置选择、通道缩减比等调优建议,验证了CBAM作为轻量级注意力模块的有效性

shrgegrb的博客 1301

16. SAP Fiori Elements 应用里图片字段(Image)的显示原理介绍

很多朋友向我反映,学习了 一段时间的 SAP Fiori Elements 开发,但是感觉整套体系对于自己来说还是个黑盒子,很多技术点,看了 SAP 官方帮助文档后,觉得自己懂了,但是一旦需要自己动手做一些东西出来时,又觉得一片茫然。 其实笔者自己也经历过这个过程。究其原因,还是大家对 Fiori Elements 一些技术细节没有理解,对 SAP 官方的知识点仅仅停留在记忆,甚至是死记硬背上面。 不过没有关系,本教程笔者会刻意设置一些练习,让大家动手,在实战中逐渐熟悉 Fiori Elements 这

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 758

Qt Creator学习,函数指针,2025.1.28

【代码】Qt Creator学习,函数指针,2025.1.28。

qq_41708281的博客 202

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

2022/1/28 字符串 双指针 || 05. 替换空格

题目地址(05. 替换空格) https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/ 题目描述 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。   示例 1: 输入:s = "We are happy." 输出:"We%20are%20happy."   限制: 0 <= s 的长度 <= 10000 前置知识 公司 暂无 思路 关键点 代码 语言支持:Java Java C

眠不觉的博客 103

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Leetcode P28 Java双指针解决

Leetcode P28 Java双指针解决

qq_40102411的博客 479

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

记录STM32F407ZGT6使用HAL库时遇到的坑

STM32F4 HAL库使用踩坑记录

2401_83105703的博客 1411

C++中的this指针

c++this

qq_41729472的博客 111

PHP 7.1.28、7.2.17、7.3.4 发布,主要是安全更新

开发四年只会写业务代码,分布式高并发都不会还做程序员? PHP 发布了三个更新版本,这三个版本主要都是安全方面的更新,...

weixin_34206899的博客 305

【LeetCode】【Java】28. 实现 strStr()-给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置

实现 strStr() 实现 strStr() 函数。 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。 示例 1: 输入: haystack = "hello", needle = "ll" 输出: 2 示例 2: 输入: haystack = "aaaaa", needle = "bba" 输出: -1 说明: 当 needle 是空字符串时,我们应当返回什么值呢?.

CJCC白朴的博客 2710

力扣28题-找出字符串中第一个匹配项的下标

力扣28题-找出字符串中第一个匹配项的下标

m0_65818274的博客 390

linux判断指针非法6,Linux Kernel 'inet6_hashtables.c' NULL指针引用拒绝服务漏洞

BUGTRAQ ID: 34602CNCAN ID:CNCAN-2009042106Linux是一款开放源代码的操作系统。Linux内核'inet6_hashtables.c'存在NULL指针引用问题,本地攻击者可以利用漏洞使系统崩溃。目前没有详细漏洞细节提供。Linux kernel 2.6.29 -git8Linux kernel 2.6.29 -git14Linux kernel 2.6.2...

weixin_33132553的博客 278

LeetCode LCP 28. 采购方案

LCP 28. 采购方案 小力将 N 个零件的报价存于数组 nums。小力预算为 target,假定小力仅购买两个零件,要求购买零件的花费不超过预算,请问他有多少种采购方案。 注意:答案需要以 1e9 + 7 (1000000007) 为底取模,如:计算初始结果为:1000000008,请返回 1 示例 1: 输入:nums = [2,5,3,5], target = 6 输出:1 解释:预算内仅能购买 nums[0] 与 nums[2]。 示例 2: 输入:nums = [2,2,1,9], tar

Daylight629博客 860
上一篇: 1.26——C语言数组、函数
下一篇: 1.30——内存管理、预处理、结构体
Superain丶
博客等级 码龄11年 9粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值