C语言基础及指针③函数与二级指针

第四站:指针的进阶-(二级指针,函数指针) cout 阅读详情

在上一篇中 , 我们分析了指针在内存中是怎样存储的 , 以及它是怎样操作变量的 , 接下来 , 我们谈谈 , 函数 , 二级指针 。

函数

C语言中函数的定义和java中方法的定义类似 , 只是没有public , private等这样的权限控制 , 定义如下:

返回值类型 functionName(参数类型 参数名称  , 参数类型 参数名称) {
      // 函数体
  }


int add(int num1 , int num2) {
      return num1 + num2 ;
}

如果我们想在函数里面 ,修改传入的参数的值 , 就如同java里面将对象传入方法中修改对象的属性 , 在C语言通过指针也可以达到同样的效果 。

 /* 想要修改传入变量的值 , 则需要使用指针通过变量的地址 , 来修改变量的值 */
void changeNum(int* i) {
    *i = 300;
}

如果不采用指针changeNum(int i) , 函数参数里面的int i 则会为i变量开辟一个新的内存空间 , 而不是我们传入的变量 。下面我们就来看看 , 他们在内存中是怎样表现的 。

    /*没有使用指针的函数*/
void changeNum(int i) {

    printf("函数中i的地址:%#x\n", &i);
    i = 300;
}

void main() {

    int i = 100;

    printf("传入函数的 i 的地址:%#x\n",&i);

    // 将变量i传入到函数中 , 不对变量去区地址
    changeNum(i);

    printf("修改后的值:%d\n", i);

    system("pause");

}

输出:

传入函数的 i 的地址:0x9a2ffcd4
函数中i的地址:0x9a2ffcb0
修改后的值:100

我们看到传入的i变量的内存地址和函数中的i变量内存地址不一样 , 并且函数也没有修改我们的i变量 , 我们将上述代码 , 做一下简单的修改 , 只要将函数的形参改变为指针变量, 将修改的变量的变量内存地址传入到函数中 , 如此在函数里面就可以修改传入的变量的值了 。

/* 想要修改传入变量的值 , 则需要使用指针通过变量的地址 , 来修改变量的值*/
void changeNum(int* num) {
     printf("函数中i的地址:%#x\n", num);
    *num = 300;
} 

changeNum(&i);

输出:

传入函数的 i 的地址:0x4ccff624
函数中i的地址:0x4ccff624
修改后的值:300

因为我们传入的是i变量的内存地址 , 所以函数中的num变量打印出的就是传入的i变量的内存地址 , 拿到了i变量地址 , 我们就可以通过指针操作传入地址的内存空间了 , 我们将其修改为300 , 所以我们打出修改后的值是 : 300

二级指针

所谓的二级指针 , 就是指针的指针 , 二级指针的内存空间中 , 存储的是一级指针的内存地址 ,示例如下:

void main() {
    int i = 10;
    // p指针变量存储的是i的内存地址
    int* p = &i;
    // p1指针变量存储的是p的内存地址
    int** p1 = &p;

    int *p2 = 100;

    printf("指针作为普通变量:%d\n", p2);

    printf("i 的地址:%#x\n", &i);

    printf("p 地址:%#x\n", &p);

    printf("通过p1取得p的地址:%#x\n", p1);
    printf("通过p1取得i的地址:%#x\n", *p1);
    printf("通过p1取得i的值:%d\n", **p1);

    // 通过p1修改i的值
    **p1 = 100;

    printf("通过p1修改过的i的值:%d\n", i);

    getchar();
}

多级指针 , 就是要往上一级一级追溯 , 然后通过*操作符来操作内存空间 ,二级指针内存模拟图:


二级指针.png

指针是操作内存的神器 , 多级指针 , 只要记住 , 多级指针里面存储的是上级指针的地址即可 。

K2P padavan固件下宽带与IPTV融合 举例说下,假如你的IPTV是拨号的,IPTV端口直接连到笔记本电脑的网口,IP是自动分配的情况下,在VLC里面是可以直接播放“rtp://239.XXX.XXX.XXX:XXXX”的,即使IPTV是DHCP模式,按道理也是可以播放的。家里很少看电视,基本上就是看看春晚,然后平时老人在家没事看看,所以就把广电的机顶盒停掉了,换了一个N1的盒子刷了CoreELEC系统,既可以通过m3u8文件看网络电视,也可以看本地的多媒体,很方便,完全满足了自己的需求。在上图的第三步中,端口设置成大于1024的端口即可。 阅读详情

相关推荐

CD-HIT的使用

继续我的生信笔记系列。从某网站的附带文献中读到该工具,搜索了一下,发现网上的大佬们都在讲如何用它去冗余,相对官方页面的介绍而言很是片面,于是刚好有聚类的需求的我准备对其全体功能做做实验,学习一下由李伟忠博士在伯纳姆研究所(现为桑福德伯纳姆医学研究所)亚当·戈兹克博士的实验室开发的牛工具。 首先是官方介绍: CD-HIT是一个非常广泛使用的程序,用于蛋白质或核苷酸序列的聚类和比较。最初由李伟忠博士在伯纳姆研究所(现为桑福德伯纳姆医学研究所)亚当·戈兹克博士的实验室开发,CD-HIT速度非常快,可以处理非常

一名学术waste的note pro 1万+

C语言基础及指针②之指针内存分析

在上一篇中 , 我们了解了C语言的基本语法 , 以及简单指针 , 也知道 , 指针是C语言的核心 , 那么我们今天就来简单剖析一下指针 , 了解他是怎么的神奇 。 今天是七夕 , 祝各位情人节快乐 。 指针的基本写法是int i = 10 ; int *p = &i ; , 由此我们可以看出 , 指针和变量类似 , 其实 , 指针也是变量 , 我们printf("%#x",

Horace 454

【深大算法设计与分析】实验六 最大流应用问题(棒球赛问题) 实验报告 附代码、数据集

【内附代码与数据集】【深大算法设计与分析】实验六 最大流应用问题(棒球赛问题)

m0_74268508的博客 1293

小说《疯狂的程序员》~经典语录

1.要么做第一个,要么做最好的一个。2.什么是鸡肋课?就是每个人都在自己课表的这门课旁边标注一个“可旷”或者“选修”。3.什么程序优化啊,都抵不上有钱,有钱就是最好的优化。说什么“效率就是金钱”,其实“金钱就是效率”。4.中国人和外国人很大不同就在于外国人总想热衷于第一时间把自己的新发现公布出来以此向广大人民群众展示自己的水平。中国人往往喜欢把自己的新发现阴在心里,自己偷偷垄断享用。唯恐被

Struggle For Network Security 1500

避坑指南:QT Creator报Unknown module(s) in QT: serialport的5种解决方法

本文详细解析了Qt Creator报'Unknown module(s) in QT: serialport'错误的5种解决方法,包括检查Qt版本兼容性、安装缺失组件、配置Kit环境等。针对Windows和Linux平台提供具体操作步骤,帮助开发者快速解决串口通信模块问题,提升开发效率。

weixin_29197051的博客 156

Ubuntu 24.04 搭建 Squid 代理服务器终极指南:从入门到 HTTPS 缓存AI模型

本文详细指导在Ubuntu 24.04系统部署Squid代理服务器,实现AI大模型文件的高效缓存。重点内容包括:1) 安装squid及必备的squid-openssl扩展包;2) 配置HTTPS拦截(SSL-Bumping)功能,创建CA证书和SSL数据库;3) 优化缓存策略,设置4TB存储空间并强制缓存常见大文件格式;4) 结合华为防火墙实现透明代理。文章特别强调实际部署中的关键注意事项和常见错误解决方案,如证书路径配置、权限设置等问题,帮助用户快速搭建企业级缓存代理服务。

zlt315的博客 1920

二级函数指针

二级函数指针

KnowBug 1389

用FSL的eddy_topup pipeline完整处理DTI数据:从原理到实战,搞定涡流和磁化率畸变

本文详细介绍了如何使用FSL的eddy_topup pipeline完整处理DTI数据,解决涡流和磁化率畸变问题。从原理到实战,涵盖了数据格式转换、脑提取、b0图像处理等关键步骤,并提供了acqparams.txt配置和eddy命令的详细解析,帮助研究人员高效完成DTI数据校正。

weixin_29235525的博客 283

c语言二级指针和函数指针

0: 什么是二级指针:让你去寻宝,给你一个地址,到那个地址以后发现宝贝还是一个地址。二级指针就是指针的指针保存的是指针的地址 二级指针,前面有两个星号, 1: 函数指针,函数作为一个参数进行传递,函数本身有一个入口地址,所以是可以实现的 函数指针叫做也叫做回调 函数指针,简单一句话就是函数地址 1.1:函数指针首先还是一个指针变量,只不过这个变量时函数的地址 1.2:c

Kodulf的专栏 1714

abaqus 根据坐标施加载荷- Analytical Field 载荷映射

在一些类型的分析中,需要将按位置分布的载荷施加到结构上,比如流体分析导出了结构的气动载荷、或者温度载荷,需要将压强分布、温度分布载荷施加到固体上。这种分析可以使用abaqus中的Analytical Field实现。 1 例子 1.1 结构 一个100*100mm的面,面的载荷分布函数为p=(x2+y2)0.5/((20.5)*100) MPa,即(0, 0)的压强为0,(100, 100)的压强为1。 1.2 载荷 载荷函数:p=(x^2+y^2)^0.5/((2^0.5)*100) in exce.

shengyutou的博客 2万+

Python实战项目2:b站评论采集

本文不对数据采集的过程做探讨,直接上代码。

lyccomcn的博客 3199

java调用dll二级指针_C语言基础及指针③函数与二级指针

在上一篇中 , 我们分析了指针在内存中是怎样存储的 , 以及它是怎样操作变量的 , 接下来 , 我们谈谈 , 函数 , 二级指针 。函数C语言中函数的定义和java中方法的定义类似 , 只是没有public , private等这样的权限控制 , 定义如下:返回值类型 functionName(参数类型 参数名称 , 参数类型 参数名称) {// 函数体}int add(int num1 , i...

weixin_39920415的博客 375

基于深度学习YOLOv10的障碍物检测系统

为了方便用户使用,我们将开发一个图形用户界面(GUI),允许用户上传图像或视频流并查看检测结果。我们使用PySide6开发GUI界面,它是Qt框架的Python绑定,适用于开发跨平台的桌面应用程序。本文详细介绍了如何基于YOLOv10模型构建一个障碍物检测系统,包括数据集准备、模型训练和推理到图形用户界面的开发。通过这一系统,用户可以方便地上传图像或视频流并进行障碍物检测,广泛应用于自动驾驶、机器人导航等领域。

斌擎科技 1052

android c语言 指针,C语言基础及指针③函数与二级指针

接续上篇 [C语言基础及指针②之指针内存分析](http://www.jianshu.com/p/d556070b12ef)在上一篇中 , 我们分析了指针在内存中是怎样存储的 , 以及它是怎样操作变量的 , 接下来 , 我们谈谈 , 函数 , 二级指针 。### 函数C语言中函数的定义和java中方法的定义类似 , 只是没有public , private等这样的权限控制 , 定义如下:```c返...

weixin_42298778的博客 314

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

WINCC7.3破解文件

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

【C基础】指针/指针运算/二级指针/函数指针

****************************************************************************************************** 什么是指针: 指针是一种数据类型,使用它可以用来定义指针变量,指针变量中存储的其实是整数,这种整数代表了内存的编号。 为什么要使用指针: 1、函数之间相独立,但有些时候需要共享变量。 传参是值传递 全局变量容易命名冲突 使用数组还需要传递长度 命名空间是独立的,但地址空间

weixin_44849258的博客 352

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C:一级指针与二级指针的详解

1.指针和数组 指针是个用来存放地址的变量; &arr表示整个数组; arr数组名表示首元素的地址; 指针解引用即表示指针所指向的内容 比如:char ptr=“abcdef”; ptr; //指针解引用即表示它所指向的内容,即abcdef ptr; //ptr里保存的是字符串的地址 2.一级指针 一级指针就是指指针,里面放的就是元素的地址,我们可以通过访问元素的地址来找到该地址里存放的内...

AngelDg的博客 3468

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【C语言】一文总结指针各项知识点,二级指针,数组指针,函数指针等

本文章对指针全方位进行讲解,深度剖析指针重点难点。

林宇恒的博客 3011

c语言二级指针的作用,为什么要使用二级指针?

概念提到指针,我们都知道指针是用来存储一个变量的地址。所以,当我们定义了一个指向指针的指针的时候(pointer to pointer),我们也称之为二级指针,那针对于这个二级指针来说,第一级指针存放的是指向的变量的地址,第二级指针存放的是第一级指针的地址。可以用下面这张图表示他们之间的关系。 上图所表达的意思也就是,一级指针变量 ptr1 存放的是 var 变量的地址,二级指针变量 ptr2 存...

weixin_34900419的博客 3334

C语言基础:二级指针和函数指针

C语言基础:二级指针和函数指针

wy2458984254的博客 1848

C语言:指针数组、函数、二级指针

指针数组是一个数组,数组中的每个元素都是指针。这些指针可以指向各种类型的数据,如整数、字符、结构体等,甚至可以指向其他数组或函数。指针函数本质上是一个函数,只不过它的返回值是一个指针。这个指针可以指向各种类型的数据,如整数、字符、结构体等。一级指针:普通指针是指向某个变量的内存地址的变量。例如int a = 10; int *p = &a;,这里p是一级指针,存储变量a的地址。 二级指针:二级指针是指向一级指针的指针。它存储的是一级指针的内存地址。比如int **pp = &p;,pp就是二级指针,它指向一

weixin_50242782的博客 2521

二级指针的作为函数形参的深入理解

在上一篇文章《C函数的“传值调用”和“传址调用”的深入分析》我们分析了函数参数的使用,对于一级指针,理解起来相对容易,而二级指针参数的理解相对难一些,我们先说一下二级指针作为函数形参的目的。 二级指针作为形参,往往是为了获取一个特定“地址”,没错,就是想要通过形参获取地址。这里可能会有些疑问,如果想要获取地址,那么直接将函数 返回值设定为指针型就可以啊,这 当然是可以的,但是还有一...

猪哥的专栏 7837

关于C语言二级指针正确使用总结

关于C语言二级指针正确使用总结 什么是二级指针 C语言中的二级指针其实就是指向指针的指针,指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链。同理可以构建三级或者N级指针,但是一般情况下用不到多级指针,只有二级指针在一些情况中需要使用,以下是二级指针的初始化: 二重指针的示意图 include <stdio.h> int mian(void) { int var;...

qq_41705337的博客 6496

C语言基础:指针(函数指针与指针函数与二级指针)

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。简而言之,回调函数就是允许用户把需要调用的方法的指针作为参数传递给一个函数,以便该函数在处理相似事件的时候可以灵活的使用不同的方法。函数指针本质上是指针,它是函数的指针(定义了一个指针变量,变量中存储了函数的地址)。在函数中不要直接返回一个局部变量的地址,因为函数调用完毕后,局部变量会被回收,使得返回的地址就不明确,此时返回的指针就是野指针。

weixin_51619876的博客 1348

C语言——详解二级指针及其与二维数组的误区、指针定义大全

C语言中的二级指针(也称为指针的指针)是指一个指针变量,它存储的不是普通的值,而是另一个指针的地址。这意味着你可以通过二级指针来访问和修改另一个指针的值。。

weixin_45720999的博客 3728

真正明白C语言二级指针

<br />    指针是C语言的灵魂,我想对于一级指针大家应该都很熟悉,也经常用到:比如说对于字符串的处理,函数参数的“值,结果传递”等,对于二级指针或者多级指针,我想理解起来也是比较容易的,比如二级指针就是指向指针的指针.....n级指针就是....<br /> <br />                                      p    *p   **p<br />                                      ---  ---  ----<br /> 

liaoxinmeng的专栏 3万+
上一篇: C语言基础及指针②之指针内存分析
下一篇: 软件测试中的那些不可遗忘的基础知识
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值