C语言--指针详解2

RK3588 Android12 添加HDMI和喇叭声音通道切换选项 rk3588 android12系统默认接hdmi out时,声音会切换到hdmi out输出,主板声卡喇叭输出会没有声音输出。现在添加一个选项设置hdmi out时,声音可以保持主板声卡喇叭输出。 阅读详情

一,指针与二维数组
    1.二维数组
        例如:
            int a [3] [4] = {{1,2,3,4},{5,6,7,8},{9,10,11 ,12}};
            
                                    a [0] [0]
                                    a [0] [1]
                    a [0] a [0] [2]
                                    a [0] [3]
                                    a [1] [0]
            a a [1] a [1] [1]
                                    a [1] [2]
                                    a [1] [3]
                    a [2] a [2] [0]
                                    a [2] [1]
                                    a [2] [2]
                                    a [2] [3]
    结论:
        a <=>&a [0]
        a + 1 <=>&a [1]
        a [0] <=>&a [0] [0]
        a [1] <=>&a [1] [0]
        a [2] <=>&a [2] [0]
    例:
        printf(“a [0] [2] =%d%d \ n”,a [0] [2],*(a [0] +2)); // 3由a [0]得到a [0] [2]
        printf(“a [0] [2] =%d \ n”,*(* a + 2)); // 3由数组名a得到a [0] [2]
        
二,
        数组指针(行指针)     本质:是指针,只不过指针指向的内容是数组;
    1.形式
        存储类型数据类型(*数组指针变量名)[列数]; eg1
    
    :
        int(* p)[10]; //定义了数组指针p,p指针指向有10个int型元素的一维
        数组p + 1:向地址大的方向偏移1个数据类型; eg2
    :
        int a [3] [4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
        int(* p)[4] = a; //初始化
        int(* q)[4];


        1>二维数组中第i,j个元素的表示:(i为行:0,1,... j为列:0,1,....)
            a [i] [j] p [i ] [j] *(*(a + i)+ j)*(*(p + i)+ j)
        2>二维数组中第i,j个元素的地址表示:(i为行:0,1 ,... j为列:0,1,....)
            &a [i] [j]&p [i] [j] *(a + i)+ j *(p + i)+ j
            
    练习:
        使用行指针实现二维数组中各个元素之和;
三,指针
    数组本质:是数组,只不过数组中各个元素是指针;
    1,形式
        存储类型数据类型*数组名[元素个数];
        eg1:
            int * a [5]; //定义了一个有5个元素的指针数组a,每个元素的数据类型为int *
            int i,j,m,n,k;
            a [0] =&i;
            a [1] =&j;
            a [2] =&m;
            a [3] =&n;
            a [4] =&k;
        eg2:
            int i,j,m,n,k;
            int * a [5] = {&i,&j,&m,&n,&k}; //定义了一个有5个元素的指针数组a,每个元素的数据类型为int *
        eg3:指针数组操作二维数组
            int a [3] [4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
            int * b [3] = {a [0],a [1],a [2]};
    总结:
        一维数组名相当于一级指针;
        二维数组名相当于行指针;
        指针数组名相当于二级指针;
四,多级指针变量
    1.多级指针概念
        指向指针变量的指针变量,叫多级指针变量;
        例如:
            int ** p;
    2.一级指针变量
        指向处理数据的指针变量称为一级指针变量,简称一级指针;
        例如:
            int i = 10;
            int * p =&i; // p为一级指针变量
    3.二级指针变量
        指向一级指针变量的指针变量,叫二级指针变量;
        例如:
            int i = 10;
            int * p =&i;
            int ** q =&p; // q为二级指针
    4.二级指针变量的形式
        存储类型数据类型**指针变量;
        例如:
            int i = 10;
            int * p =&i;
            int ** q =&p; // q为二级指针 
            
            printf(“%d \ n”,* p);
            printf(“%d \ n”,** q);
五,void型指针
    1.不确定数据类型的指针;
    2.形式
        void *指针变量名;
        例如:
            void * p; // p是不确定数据类型的指针;
    3.运算
        对于虚型的指针变量,实际使用时,一般需通过强制类型转换才能使空型指针变量得到具体变量或数组地址。
        在没有强制类型转换之前,虚型指针变量不能进行任何指针的算术运算。

    注意:
        可以将任意数据类型的指针赋予void型指针;
        绝不可以将虚型指针赋予确定数据类型的指针;
    练习:
        void型指针变量一维数组;
        int a [10] = {1,2 ,3,4,5,6,7,8,9,10};
        void * p = a;
        int i;
        for(i = 0; i <10; i ++)
            printf(“%d”,((int *)p)[i]);
六.const指针
    1.形式
        1> const修饰指针指向空间的值
            const数据类型*指针变量名;
            等价:数据类型const *指针变量名;
            含义:
                不能通过指针变量去修改指针变量指向空间的值,但变量本身的值可以被修改;
            
            例如:
                int i = 10;
                const int * p =&i; //
                * p = 20;(×)//不能通过指针变量修改指针变量指向空间的值;
                i = 20;(√)
        2> const修饰指针本身
            形式:
                数据类型* const指针变量名;
            含义:
                不能修改指针的指向,但可以通过指针修改指针指向空间的值;
                例如:
                    int i,j;
                    我= 20;
                    j = 30;
                    int * const p =&i;
                    p =&j;(×)//不能修改指针变量p的指向
                    * p = 50;(√)
        3> const既修饰指针指向空间的值又修饰指针变量本身
            形式:
                const数据类型* const指针变量名;
            含义:
                既不能通过指针变量修改指针变量指向空间值,也不能修改指针的指向;
                
            例如:
                int i,j;
                我= 20;
                j = 30;
                const int * const p =&i;
                i = 30;(√)
                * p = 30;(×)//不能通过指针变量修改指针变量指向空间的值
                p =&j;(×)//不能修改指针的指向


    
    
    
    
    
    
    
    
    
        

辉芒微教程第七篇《PWM与PWM3调节LED灯的亮度》 这个其实就是PR3L = 128设置的,由于我们刚刚寄存器设置了8位模式,其设置的范围就是0-255,而128/255≈50%左右,因此PR3L就是我们的占空比调节的寄存器,我们可以通过它来调节占空比,大家可以试试它占空比设置10%,30%,60%来看看它的不同效果,灯的亮度是肯定不一样的,如果有条件的朋友,可以购买一款逻辑分析仪去看他的占空比。平平无期的这个东西有什么东东用,貌似是没什么用,只是一个概念而已,是不是不同设备可以设置1秒,3秒,10秒的周期就行?但是它占空比为什么是50%,怎么得来的? 阅读详情

相关推荐

智能车竞赛必备:STC32G144K开源库实战指南(含总钻风摄像头配置)

本文为智能车竞赛参赛者提供了一份基于STC32G144K微控制器与逐飞开源库的实战开发指南。文章详细介绍了从开发环境搭建、总钻风摄像头驱动配置与图像采集优化,到核心控制算法实现与多任务调度等关键步骤,旨在帮助队伍快速构建稳定高效的视觉处理系统,提升竞赛竞争力。

weixin_29191081的博客 711

C语言指针详解2

C语言指针详解(2)

2401_84797190的博客 1705

GAMES104:02引擎架构分层-学习笔记

用户层工具层(Tool Layer):编辑器、工具界面功能层(Function Layer):渲染Rendering、动画Animation、物理Physics、相机Camera和实现游戏性的脚本Script、状态机FSM、AI等功能模块资源层(Resource Layer):各类图片、动画、音频资源加载核心层(Core Layer):核心功能如内存管理、容器分配、数据计算、多线程处理等平台层(Platform Layer):对接不同游戏平台、主机和硬件。

噗噗噗的博客 1268

【C语言】带你层层深入指针——指针详解2

本文深入解析C语言指针的核心概念,分为字符指针、数组指针和函数指针三部分。字符指针部分演示了常量字符串地址的存储特性,多个指针指向同一字符串时地址相同。数组指针部分详细讲解了数组名与地址的关系,强调一维数组传参本质是传递首元素地址,二维数组传参则是传递行地址。函数指针部分介绍了声明语法和使用方法,可通过指针直接调用函数。最后通过传址调用示例,说明通过指针修改变量值的原理。全文通过代码示例和运行结果,帮助读者逐步理解指针的多层次应用。

zore__的博客 1696

Aveva Marine C# 二次开发入门001

1# 引用 C:\AVEVA\Marine\OH12.1.SP4\Aveva.ApplicationFramework.dll C:\AVEVA\Marine\OH12.1.SP4\Aveva.ApplicationFramework.Presentation.dll 2# 引用命名空间, using Aveva.ApplicationFramework.Presentation;usi...

weixin_30245867的博客 1911

Unity零基础到入门 ☀️| 【UI系统学习】轻松学会 Unity 的 UGUI基础控件的使用(包括一个简易血条、蓝条设计)

Unity,UGUI。本篇博客来挑几种Unity中最常用的UI控件如何使用和使用技巧,包括一个简易血条蓝条的小实例

努力前行,总会成为自己心中的那道光 2万+

【C语言】指针详解2

这篇博客分享的指针部分为与数组有关的指针知识,包括一位数组和二维数组。

2302_80020887的博客 1360

Docker安装并运行AnythingLLM的详细教程

通过本文的介绍,你已经掌握了如何在 CentOS 系统上使用 Docker 安装并运行 AnythingLLM。AnythingLLM 提供了强大的功能,支持本地知识库搭建和多模态输入,非常适合个人和企业使用。希望本文能帮助你快速上手并搭建自己的 AI 知识库。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 5846

C语言之指针详解(2)

C语言指针学习第二讲

2301_80191662的博客 1339

IMEI引起的无法驻网问题

问题不复杂,场景很简单,如上图,UE在进行LTE attach过程时,在送完NAS security mode complete后,就立刻收到了网络attach reject 带cause 6 Illegal ME,根据协议描述这个cause 代表ME不被网络可接受,例如ME在禁止名单或者黑名单中就会有这种cause。然而前方在报这个问题的时候,也是知道SIM卡和手机IMEI在运营商那边没能成功绑定,然后才报的问题,要查看手机是不是有问题...... 告诉前方原因后,还认为是手机问题,告知要继续查。

asd199086的博客 1426

uniapp - 实现免费OCR文字识别方案,用户上传图片后进行扫描识别获取图片上的文字,uniApp纯前端做图片OCR识别——无需服务器进行OCR识别插件(不需要依赖任何SDK或第三方API服务)

uniapp实现orc识别免费的插件识别不花钱,无需第三方OCR文字识别API,uniApp拍照或者选择图片免费识别,纯前端不需要服务器,Uniapp提取图片上的文字,本地ocr识别技术,uni-app图片OCR识别文本,uniapp有没有免费的ocr识别组件,uniapp前端实现文字识别,身份证识别,营业执照识别 (兼容APP、H5、小程序 不需要任何SDK)跨端无SDK方案:Uniapp实现OCR文字,离线OCR识别,uniapp tesseract.js实现文字识别,uniapp文字识别无需依赖sdk

🏆 前端领域优质创作者 4250

C语言指针详解2 -- 数组指针

本篇文章主要讲解C语言中关于数组指针的相关内容,共有数组名的特殊作用,使用指针访问数组,数组指针,数组传参的本质,二级指针,指针数组以及用指针数组模拟二维数组七个板块。

L_0907的博客 1771

ArcGIS Pro符号化教程

本文详细介绍了ArcGIS Pro的软件设置和符号化操作步骤。主要包括:1)设置默认工程目录和关闭地图自动加载;2)创建新工程的基本流程;3)点要素的单一符号化方法,包括样式修改和图层调整;4)图表符号显示过滤器的使用,涉及字段添加、图表类型选择和背景设置。文章还提供了操作截图和数据下载链接,适合GIS初学者学习ArcGIS Pro的基础符号化操作。

WwLK123的博客 549

c语言指针详解2

同理arr[i]应该等价于*(arr+i),数组元素的访问在编译器处理的时候,也是转换成⾸元素的地址+偏移量求出元素的地址,然后解引⽤来访问的。parr[i]是访问parr数组的元素,parr[i]找到的数组元素指向了整型⼀维数组,parr[i][j]就是整型⼀维数组中的元素。• &数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素。在数组传参的时候,传递的是数组名,也就是说本质上数组传参传递的是数组⾸元素的地址。同时因为arr和p是等价的,我们使用p[i]也是可以的。

kuaiww的博客 372

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

c语言指针详解(2)

本文主要探讨了C语言中const修饰指针的应用、野指针问题及指针传参机制。首先详细分析了const修饰指针变量的三种情况:修饰指针指向内容(*左边)、修饰指针变量本身(*右边)以及同时修饰两边的情况。其次剖析了野指针的三大成因(未初始化、越界访问、空间释放)及其规避方法(初始化、防越界、置NULL)。最后通过strlen模拟实现和swap函数案例,对比了传值调用与传址调用的区别,指出传址调用可实现函数对外部变量的修改。全文系统性地讲解了指针的关键使用技巧和注意事项。

2201_75600170的博客 997

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C语言指针详解(2)

前面已经详解过初级指针内容C语言指针详解(1)-优快云博客,不懂的小伙伴可以提前观看之前的内容。 const修饰的变量称为常变量,类似于是一个常量,是不可以被修改的。 为什么说不等于常量,我们看着一组代码。 const如果修是一个指针变量会是什么样的一个结果呢? 分以下两种情况: 例如: 这是两类常见的野指针。 如果直接进行&arr的话,此时得到的地址不单单是首元素的地址,而是整个数组的地址。注:这里不要被这个取整个数

多敲代码防脱发的博客 998

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

c语言中指针p 2什么意思,C语言中的指针以及二级指针代码详解

很多初学者都对C中的指针很迷糊,希望这篇blog能帮助到大家:1.什么是“指针”:在执行C程序的时候,由于我们的数据是存储在内存中的。所以对于C程序本身来说,如果想找到相应被调用的数据,就要知道存储该数据的内存地址是多少,换言之,C程序通过已知的内存地址到相应的内存位置存储数据。这里简单说一下内存管理(对于初学者来说。为了避免专业术语引发的理解问题,下面的叙述尽量避免专业定义:),对于现代计算机系...

weixin_39586683的博客 835

C语言 (2)指针详解

C语言指针详解 为什么需要指针? 指针解决了一些编程中基本的问题。 第一,指针的使用使得不同区域的代码可以轻易的共享内存数据。当然你也可以通过数据的复制达到相同的效果,但是这样往往效率不太好,因为诸如结构体等大型数据,占用的字节数多,复制很消耗性能。但使用指针就可以很好的避免这个问题,因为任何类型的指针占用的字节数都是一样的(根据平台不同,有4字节或者8字节或者其他可能)。 第...

JYliangliang的博客 632

详解C语言中指针的用法(2)

本文主要讲解了C语言中const修饰指针的用法、指针运算、野指针及避免方法、assert断言以及指针传址调用等内容。重点分析了const在指针中的三种不同用法(const 、 const、const * const)及其区别;通过数组示例展示了指针的加减运算和关系运算;详细解释了野指针的成因及通过初始化、避免越界等方法防范;介绍了assert断言的使用场景;最后通过swap函数对比了传值调用和传址调用的区别,说明指针在函数参数传递中的重要作用。全文通过代码示例深入浅出地讲解了指针相关的核心概念和使用技巧。

playtogether16的博客 681

c语言进阶部分详解(指针进阶2)

函数指针是一个指向函数的指针变量。它可以用来存储函数的地址,并且可以通过解引用指针来调用函数。 函数指针数组是一个数组,每个元素都是一个函数指针。它可以用来存储多个函数的地址。 指向函数指针数组的指针是一个指针,它指向一个包含函数指针数组的指针变量。它可以用来存储函数指针数组的地址,并且可以通过解引用指针来访问函数指针数组。 回调函数是一个通过函数指针传递给另一个函数的函数。它允许在调用函数中执行传递的函数,从而实现函数的动态调用

qq_74415153的博客 1307

C语言函数详解2——函数传指针

函数中使用指针

Solaku7的博客 2539

C语言:指针详解(2)

一、数组名的理解二、使用指针访问数组三、一维数组传参的本质四、冒泡排序五、二级指针六、指针数组正文开始。

2302_80177865的博客 1010
上一篇: C语言--指针详解1
下一篇: win10快捷键(常用快捷键)
JIANXIN.Y
博客等级 码龄9年 273粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值