C语言指针学习总结

蓝牙6.0的‘新雷达’:Channel Sounding信道探测,真能比UWB更香吗? 本文探讨了蓝牙6.0的Channel Sounding信道探测技术在室内定位领域的应用潜力。通过与UWB技术的对比分析,揭示了其在成本、功耗和兼容性方面的优势,特别是在智能门锁、物品追踪等场景中的商业价值。Channel Sounding技术不仅具备亚米级精度,还能通过现有蓝牙设备实现零边际成本部署,为物联网应用提供了新的解决方案。 阅读详情

上学的时候学习C语言,最烦的就是里面指针,可是指针也恰恰是C语言的灵魂。

最近在重温数据结构的内容,因为大多数据结构的教材都是用C语言描述的,而数据结构中也大量的用到了指针的内容,所以我就在这篇笔记中记录一下我这周复习C语言的心得。

先看看百科上对指针的描述。

在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在计算机存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。

作个比喻,假设将计算机存储器当成一本书,一张内容记录了某个页码加上行号的便利贴,可以被当成是一个指向特定页面的指针;根据便利粘贴面的页码与行号,翻到那个页面,把那个页面的那一行文字读出来,这就是指针的作用。

下面将通过一些代码说明指针在C语言中的表现形式。

int main(){
    int a ;
    a = 10;
    int *p;
    p = &a;
}

如果用图片描述这段代码,就是下面这个样子。
这里写图片描述

怎么来理解呢?首先这段代码里通过int a和 int *p定义了两个变量:分别是p和a,p变量与a变量的定义方式有一些不同,a变量就是C语言中一个很普通的int型变量,通过a=10 将10这个整型赋值给了a。

而p变量的定义前面有一个 * ,这个 * 表明了p变量是一个指针变量,指针变量里面只能存放地址,这个地址是内存中的某个位置,在上面的代码中我们在p变量里面存放的是0x2C406B24这个地址,这个地址里面存放的值必须是int值,在我们这里,p变量里面存放的地址是a变量的地址,a变量在定义时就是一个int,所以是符合要求的。

这样一来,我们就说p变量指向了a变量,p = &a 这句代码完成了p指向a的这个操作。这里没有写p = a,那是因为p变量需要的是一个地址,而不是a变量里面存放的值,所以&这个操作符就是取地址的意思,通过&a取到a变量在内存中的地址,将地址赋值给p指针变量,就使p指向了a。

既然p是一个指针变量,那它就可以赋值给另外一个指针变量,如下:

int main(){
    int a ;
    a = 10;
    int *p;
    p = &a;
    int *q;
    q = p;
}

新定义了一个指针变量q,将p变量里的值0x2C406B24这个地址,赋值给q,这样q变量与p变量里都保存了同样的地址,就是说他们都指向同一个值。

int main(){
    int a ;
    a = 10;
    int *p;
    p = &a;
    int *q;
    q = p;
    *p = 5;  //  
    *q = 0;  //  
}

介绍完指针,那这个东西有什么作用呢?如果要修改a变量里面的值,可以执行a=5,这是没介绍指针之前的做法。学习完指针后,通过指针也能达到修改a变量里的值的目的*p=5。

这是很有用的,举个例子,我们来看下面这段代码。

void swap(int a,int b);
int main(){
    int a = 5;
    int b = 6;
    swap(a, b);
    printf("a=%d b=%d",a,b);
    return 0;
}
void swap(int a, int b){
    int temp;
    temp = a;
    a = b;
    b = temp;
}

上面这段代码,这段代码能够达到交换a和b的值的目的吗?答案是不能,因为C语言在调用函数时,永远只能时传值给函数。

在C语言中每个函数都有自己的变量空间,函数的参数也位于这个独立的空间中,与其它函数没有关系,上面的代码中有两个函数,一个是main函数,另一个是swap函数,所以这两个函数里的a,b变量是不同空间中的变量,他们之间毫无关系可言。

所以对swap函数中的a,b做交换,完全不能改变main函数中a,b变量的值。

函数在每次运行的时候,会产生一个独立的变量空间,在这个空间中的变量,是函数这次调用时所独有的,称为本地变量。

定义在函数内部的变量就是本地变量,参数也是本地变量。

变量有 生存期 和 作用域 这两个属性。

  • 生存期:什么时候变量开始出现,到这个变量消亡
  • 作用域:在代码的什么范围内可以访问这个变量(这个变量可以起作用)

对于本地变量而言,生存期与作用域都是在本地变量所在的大括号(块)内。

既然都说到本地变量了,那就总结一下本地变量的一些规则。

本地变量的规则:

  • 本地变量定义在块内
  • 本地变量只存在于运行块内语句的期间
  • 在块外面定义的变量,块里仍然有效
  • 本地变量不会默认初始化
  • 参数这样的本地变量在进入函数时就被初始化了
  • 列表内容

又说回上面的交换函数,那么怎样才能达到交换main函数里a,b两个变量值的目的呢?

void swap(int a,int b);
int main(){
    int a = 5;
    int b = 6;
    swap(&a, &b);
    printf("a=%d b=%d",a,b);
    return 0;
}
void swap(int *pa, int *pb){
    int temp;
    temp = *pa;
    *pa = *pb;
    *pb = temp;
}

利用上面所学习的指针,改写成上面这样,才能达到交换的目的。

始终记住:C语言在调用函数时,永远只能时传值给函数。在上面的代码中,自然也是传值进的swap函数,只不过在使用指针时,这个值指的是地址,地址当然也是一个值。

将main函数中a和b变量的地址传给了swap函数中的指针变量pa和pb,在swap函数中通过 *pa 和 *pb 操作到了main函数中的a和b,从而达到了交换的目的。

这只是指针的作用之一,用好了指针,才能体现出C语言更多强大的地方。


数组

这是一篇总结指针的文章,那么我为什么要提到数组呢?

因为数组和指针又太多的相似之处。看下面一段代码。

int test(int a[], int numOfa){
    int i;
    for(i = 0; i<numOfa; i++){
        printf("%d",a[i])
    }
}

其实数组中的[ ],与 * ,. ,& 等运算符一样,也是一种运算符。

上面test函数里的a数组变量,本身就是一个地址,所以我们在调用这个函数的时候,需要写成这样test( &a, i) ,需要传入一个地址,这个地址所在的变量保存的就是一个数组。

例如:

  • int a[10]; int *p = a; // 不需要用&取地址,数组变量本身就表达地址
  • a == &a[0] 但是数组的单元表示的是变量,需要用&对变量取地址。数组变量第一个单元的地址就是数组变量的地址。
  • p[0] == a[0] [ ] 运算符可以对数组做,也可以对指针做
  • *a = 9 将数组的第一个单元赋值为9,说明 * 运算符既可以对数组做,也可以对指针做

最后在总结一下const关键字在指针中的规则:

  • const int *p = &i :const在前,表示不能通过指针去修改变量
  • int * const p = &i :const在后,表示p这个指针变量不能再保存别的地址值

上面就是我在复习C语言指针时的一些总结,今后有需要添加的也会陆续补充。

车载导航GPS欺骗 因此,如果我们能够模拟卫星信号,将模拟的信号通过信号发射装置发送给GPS传感器,那么就有可能实现欺骗GPS传感器获取虚假的位置信息,这种技术即SDR(软件无线电,Software Defined Radio)[2]。究其原因,在不使用时钟模块的条件下,HackRF发送信号的频率可能不十分精准,因此GPS传感器接收到信号之后可能无法正常解析GPS信号,因此时钟信号可能是HackRF进行GPS欺骗的关键。2)HackRF是否使用了时钟模块,时钟模块决定了信号发送频率的精准程度,对实验的成败也是至关重要的。 阅读详情

相关推荐

Ubuntu更新后VirtualBox报错rc=-1908?手把手教你修复Kernel driver not installed

本文详细解析了Ubuntu更新后VirtualBox报错rc=-1908的原因,并提供了完整的修复方案。通过重新安装VirtualBox、处理DKMS内核模块以及解决Secure Boot问题,帮助用户快速恢复虚拟机功能。特别针对Kernel driver not installed错误,给出了从诊断到修复的详细步骤。

weixin_42519781的博客 339

C语言:从基础到精通指针

初始指针(0):着重于讲解指针的概念、基本用法、注意事项、以及最后如何规范使用指针深入指针(1):讲解指针变量常见的类型,如何去理解这些类型、最后就是如何正确的使用深入指针(2):讲解指针较为高阶的用法,理解难度 中度深入指针(3):在(2)的基础上,再讲解其余指针类型的高级用法,理解难度 偏难深入指针(4):指针相关的题目、及答案。理解难度 中度。

FSRMWK的博客 1184

Nexus7二代刷机教程(新手向)

该教程将使用lineageos(Android 11),同时借鉴了lineage官方的教程和songelf的教程。

2403_84391487的博客 5217

【C语言进阶】从入门到入土(指针第二篇)

四. 数组传参和指针传参 五. 函数指针 六. 函数指针数组 七. 指向函数指针数组的指针 八. 回调函数

恒等于C的博客欢迎您 537

STM32F0实现数字化SPWM纯正弦波逆变器

这个没啥好说的,搭电路的事。其核心思想是两边桥臂分别由两个180度相位差的正弦波与三角载波比较来控制,优点是在开关器件工作频率一样的情况下,输出PWM频率是单极性SPWM的2倍,能够明显减少谐波,因此只需要相对较小的电感和电容滤波器件就可以起到很好的滤波效果,提升了系统的性能,也精简了系统体积,降低了成本。而双极性pwm则是在整个正弦周期内,四只管子都在高频开关状态工作,对角线上的管子一起导通,另一对角线上管子互补导通,实际上只需要一路互补的PWM控制,负载上电压在正电压和负电压之间切换,不出现0v。

forlifefor的专栏 1万+

保姆级教程:手把手带你复现APFNet论文的RGBT目标跟踪模型(附完整代码与数据集配置)

本文提供了一份详细的APFNet论文复现指南,涵盖从环境搭建到模型测试的全流程。通过解析多模态融合模块和渐进式训练流程,帮助读者高效完成RGBT目标跟踪模型的复现工作,特别针对训练和测试中的常见问题提供实用解决方案。

weixin_29056781的博客 343

学完C语言,学什么, 怎么学,之后学什么

学完C语言然后学什么???

m0_63045003的博客 5108

【STM32F042】使用NTC热敏电阻实现温度测量

1.NTC介绍 NTC是负温度系数的简写,全称是Negative temperature coefficient.意思是随着温度的升高,电阻值呈现下降趋势。常用作温度传感器。这里有一个式子表示负温度系数的电阻值: RT=R0*exp(B (1/T-1/T0)) RT为周围温度为T (K) 时的电阻值,R0是周围温度为T0(K) 时的电阻值,注意这里的温度是开...

BadBoyHolly的博客 3万+

C语言——指针

C语言——指针

weixin_59796310的博客 11万+

ensp VRRP+MSTP综合性实验

网络结构拓扑图 实验要求 要求: 1、全网互通,IP地址任意规划,路径最优,无环路。 2、AR1上面有一个loopback口,ip地址为1.1.1.1/24, 要求所有电脑能访问。 3、vlan10通过LSW1访问1.1.1.1,当LSW1出现问题即使 g0/0/1故障亦能通过lsw2访问。 vlan30通过LSW2访问1.1.1.1,当LSW2出现问题即使 g0/0/1故障亦能通过lsw1访问。 4、LSW1为vlan10的主根,vlan30的备根。 LSW2为vlan30的主根,vlan1

qq_45631844的博客 1万+

Python从0到100(二):Python语言介绍及第一个Pyhon程序

Python从0到100(二):Python语言介绍及第一个Pyhon程序。与C和Java比,Python的学习成本和难度曲线不是低一点,更适合新手入门,自底向上的技术攀爬路线。

拥有百余位万粉技术博主、200余位可合作代发博主,私域技术社群规模达千人,商务合作私信 5440

C语言指针学习经验总结

C语言指针学习经验总结       指针是C语言的难点和重点,但指针也是C语言的灵魂 。这篇C语言指针学习经验总结主要是我入职以来学习C指针过程中的点滴记录。文档里面就不重复书上说得很清楚的概念性东西,只把一些说得不清楚或理解起来比较费解的东西做一下讲解,希望能达到以下三个目的 通过写这些东西,把我脑袋中关于C的模糊的知识清晰化。给初转C的同事们一点提示和帮助。也希望各位前辈检查一下文

Li_soso的专栏 1209

【2025最新版】间接平差——以水准网平差为例 (python详细过程版)

水准网间接平差的python代码实现。博客长期更新,本文最新更新时间为:2025年5月20日。

点云侠的博客 1702

C语言指针学习

指针是C语言中的一个非常重要的概念,它是一个变量,用于存储另一个变量的内存地址。换句话说,指针“指向”了某个变量在内存中的位置。结构体通过struct关键字定义,其基本语法如下:struct 结构体名 {数据类型 成员1;数据类型 成员2;...假设我们需要定义一个表示学生// 定义一个结构体类型 Student// 姓名int age;// 年龄// 成绩// 创建结构体变量并初始化// 访问结构体成员return 0;在这个例子中,

m0_65405332的博客 2041

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

c语言指针学习

c语言指针学习 指针只有两层含义, 1:指向地址, 2:指针有类型,类型是其指向的内存空间数据的类型,表示从首地址开始取多少字节。 C语言相比于其他高级语言,不仅是运行速度快,而且还能够直接操作硬件,操作硬件就是依靠C语言指针这一强大功能实现的,学会C语言指针,能大幅度提升编程能力。 再讲一下地址是个什么东西:计算机存储的数据都有一个唯一的地址,32位系统就是8位16进制数表示的。比如0x12345678就是计算机的一个地址。一位十六进制代表四位二进制,0x12345678转换成二进制就是0001-0010

qq_51385211的博客 215

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C语言指针学习路径

摘要:本文系统介绍了C语言指针的学习路径,从基础概念到高级应用共7个阶段。首先讲解指针定义、取址解引用操作;随后覆盖指针与基本类型、数组、函数的结合;重点说明动态内存管理要点;最后解析指针数组、多级指针等高级主题及常见陷阱。文章提供了各阶段的典型代码示例,并推荐了《C Primer Plus》等学习资源和LeetCode等练习平台,强调通过手写调试和小项目实践来巩固理解,避免死记硬背。全文约150字,概括了指针学习的核心内容和实践方法。

qq_32576083的博客 1152

android 蓝牙通讯demo

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

C语言中学习指针遇到的问题与以后的学习道路

C语言中学习指针遇到的问题与以后的学习道路 在这个指针的学习里,我学习的可谓是相当的挣扎了。 没有了往日学习其它章节的高效性,有的只是无穷无尽的问题与懵懂。 他就像是一层迷雾,令我捉摸不透。 首先要注意的就是指针这个概念:它指的就是地址。没其它任何含义 然后就是指针变量这个东西,不就是加了个 * 然后从指针所指向的地址里抽出那个值嘛 然后就是一堆乱七八糟的概念 全部都是感觉能用的到的要去记忆...

dd121_的博客 516

c语言函数指针学习心得,c语言 函数指针 学习C语言笔记

c语言 函数指针大一学的C语言,课,算是学了一遍,后来接触Java,C++,易语言,python,还有写单片机用的类似C语言,可以说后来根本没有好好学,C也忘个差不多了,但是这次我课选了OC,不喜欢Javaw...q16942226722017年10月15日 21:1464十年之后重学C语言1.每个程序员都该有本翻烂的K&R1.1 多次自学,不得其法距离大学时学习C语言已有十个年头了。印象...

weixin_31752923的博客 416

c语言指针分析和学习方法

• 调试与分析:使用调试工具(如GDB)或打印语句,观察指针在程序运行过程中的变化,分析指针指向的内存地址和数据。例如,在交换变量值的程序中,打印指针的值和指向的数据,验证交换是否成功。• 解决实际问题:将指针应用于实际问题的解决中,如使用指针实现数组的排序、查找等算法,或在数据结构操作中使用指针,提高编程能力和对指针的理解。• 常量指针:指针指向的数据是常量,不能通过指针修改该数据。• 总结经验:在学习和实践过程中,总结指针使用的规律和技巧,如指针与数组的关系、指针在函数参数传递中的注意事项等。

2501_90226362的博客 811

C语言 指针学习总结

指针是内存中一个最小单元的编号,也就是地址。平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量。以上就是今天要讲的内容,本文介绍了指针的内容。

Echo_cy_的博客 2728

C语言指针初步学习

在计算机中,内存被人们划分成一个个连续的储存单元,每个单元都有编号,这个编号就是地址。指针本质上就是内存地址,而我们平时所说的“”指针“”通常指指针变量int a= 0;//pa是指针变量return 0;上述代码中pa是一个指针变量,用来存放a的地址。在int* pa声明中:*表示这是一个指针变量,int表示该指针变量存放的是int类型的地址,&是取地址运算符,用来获取变量的内存地址。

2401_88599502的博客 632

指针学习记录 - C语言

每个内存单元大小取1字节并且有编号,👈这个就叫做地址,也叫指针即:内存单元编号==地址==指针内存中字节很多,需要给内存编址,这并不是把每个字节的地址记录下来,而是通过硬件设计完成的硬件编址也是如此计算机内有很多硬件单元,而硬件单元要相互协同工作,👈这至少需要能够进行数据传递如何通信呢?就是用“线”连起来,这里主要讲一个地址总线可以简单理解为:32位的机器有32根地址总线,每根线只有两态,表示0,1【电脉冲有无】,那么就能表示2^32种含义,每种含义都代表一种地址。

ajole的博客 954

C语言学习笔记之指针的运算

C语言中指针的运算 /*以下实验是探究当指针不是指向一片连续的空间 而是指向数组时的情况 编译器为TDM-GCC 4.9.2 64-bit Release */ #include &amp;amp;amp;amp;amp;amp;amp;amp;lt;stdio.h&amp;amp;amp;amp;amp;amp;amp;amp;gt; int main() { int a1[]={0,1,5,9,4,}; //为避免偶然 我不按顺序排数 int *p = a1; pr

insight2的博客 314

c语言指针误区,【深度揭秘】C语言——指针学习10大误区

“终于等到的免费网络公开课”【深度揭秘】C语言——指针学习10大误区【深度揭秘】C语言——指针学习10大误区指针一直是C语言中比较精髓的部分,很多学员学习起来很吃力课中李老师通过10种误区来对指针的一系列精髓部分进行讲解,让初学者对指针不再感到困惑,120分钟打通你C语言的任督二脉。【10大误区】误区1:变量与地址的概念混淆误区2:指针与指针变量混淆误区3:直接访问与间接访问混淆误区4:空指针与空...

weixin_31364787的博客 362

C语言指针学习资料:助你轻松掌握指针精髓

C语言指针学习资料:助你轻松掌握指针精髓 去发现同类优质开源项目:https://gitcode.com/ 项目核心功能/场景 提供C语言指针学习资料,适合初学者和进阶者。 项目介绍 在编程世界中,C语言是一种基础且强大的编程语言。然而,C语言的指针概念常常让初学者望而却步。为了帮助更多的编程爱好者轻松掌握C语言指针,我们推出了这个开源项目——C语言指针学习资料。 本项目包含了一份名为“学习c语言...

gitblog_06780的博客 529

C语言指针深入学习

C语言指针神入学习,介绍了字符指针、数组指针、函数指针等指针类型,并介绍了回调函数,动过学习库函数qsort及其模拟实现加强对回调函数和函数指针的理解与运用。

2401_88599502的博客 1444
上一篇: 使用wait/notify实现线程间的通信
下一篇: 指令的存储与执行初探
KKSJS
博客等级 码龄9年 16粉丝 19原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值