一级指针无法从函数里带出字符串,二级指针却能在函数结束后访问字符串地址空间的原因(具体分析)

Windows版TASSEL5的下载及安装 TASSEL5是一款用于研究表型和基因型关系的软件,由美国康奈尔大学Buckler实验室所研发。,选择Windows环境安装包下载并安装。1.安装成功后TASSEL5界面。 阅读详情
#include<stdio.h>
#include<stdlib.h>

void get_string(char  **p)						
{												
    *p="hello world";
}
int main(void)
{
	char *str = NULL;
	get_string(&str);
	printf("%s\n",str);
}

void get_string(char  *p)						
{	
	//printf("%p\n",&p);	
    p="hello world";
	
}
int main(void)
{
	char *str = NULL;
	//printf("%p\n",&str);
	get_string(str);
	printf("%s\n",str);
}

上面那个函数能打印出字符串,而下面那个函数不能打印字符串。 

 一级指针函数原理:

 

因为在执行函数时,内存会在栈空间里分配空间给函数,而函数执行结束时栈空间会释放,既无法再访问此空间。main 和get_string函数是不同的栈空间。

指针p指向的是“”hello world“它是保存在内存的数据段内,生存周期是main()结束时释放。指针str一开始指向的是一个空的空间,而这个空间在函数内指向了p。当函数结束,p的地址被释放。既str所指的内存无法访问那块区域。

 

二级指针:

把str指针的地址传给p,经过一次解引,就相当于使str指针直接指向数据段“”hello world“”的地址,所以能在函数结束后能通过指针str打印出字符串。

小卫星多普勒频偏MATLAB代码 多普勒频偏是由于发射机和接收机之间的相对运动而引起的频率变化。对于小卫星,由于其速度和高度的变化,多普勒频偏会变得更加明显。本文将探讨小卫星多普勒频偏的原理、影响因素以及补偿方法。多普勒频偏的原理当发射机和接收机之间存在相对运动时,接收到的信号频率会发生变化。这种频率变化称为多普勒频偏。其原理可以描述如下:设发射机和接收机之间的距离为 d,发射信号的频率为 f0,发射机和接收机的相对速度为 v。则接收到的信号频率 f 为:其中 c 为光速。 阅读详情

相关推荐

Vite与Webpack路径配置大不同:从Vue2迁移到Vue3必须知道的public目录使用技巧

本文详细解析了Vite与Webpack在public目录路径配置上的核心差异,为Vue2迁移到Vue3的开发者提供实用指南。重点对比了两种构建工具的资源处理逻辑,给出典型编译警告的解决方案,并分享路径适配表与高级优化技巧,帮助开发者高效完成技术栈升级。

weixin_30836759的博客 485

char p[] = "hello world" 与 char *p = "Hello world" 的差异

<br /><br />请看两个程序: <br />(1) <br />char *GetString(void) <br />{ <br />char p[] = "Hello world"; <br />return p; <br />} <br />void main() <br />{ <br />char *str = NULL; <br />str = GetString(); <br />cout << str << endl; <br />} <br /><br />(2) <br />ch

york_software的专栏 854

从零开始:用ADS仿真设计一个2.4GHz Wi-Fi低噪声放大器(含完整电路图)

本文提供了一份详细的ADS软件仿真指南,手把手教你从零开始设计一个2.4GHz Wi-Fi低噪声放大器。内容涵盖核心指标理解、晶体管选型与建模、匹配网络设计、偏置电路集成,并通过S参数仿真、噪声优化及线性度验证等步骤,最终呈现完整的优化电路图,助力射频初学者掌握LNA设计全流程。

weixin_29197835的博客 806

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

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

AngelDg的博客 3468

PX4代码解析(1)

前言 做pixhawk飞控有一段时间了,但在学习过程中遇到许多困难,目前网上找不到比较完整的PX4学习笔记,我打算结合自己理解,写写自己对PX4源码的理解,不一定对,只是希望与各位大佬交流交流,同时梳理一下无人机知识。 目前打算分享以下几个内容:代码架构;通信协议;姿态解算算法,控制算法。先这样,后面想到再加。本章先来聊聊px4代码结构 一、代码整体结构 既然要聊px4代码结构,那就先把px4代码结构图放出来,因为px4源码仍然在不断更新迭代,因此老版本与新版本目录结构可能有些不同,我的代码解析参考版本为V

qq_36903625的博客 1万+

椭圆曲线点加的推导公式(一)

椭圆曲线点加推导过程

qq_32100199的博客 1516

为什么一定要使用二级指针,而一级为什么就不行呢??

为什么一定要使用二级指针,而一级为什么就不行呢?? 不是说函数中传递指针,在函数中改变指针的值,就是在改变 实参中的数据信息嘛??? 额。。。其实吧,上边说的也对,可问题就在这块了。。。问题是,在建立二叉树的过程中,不是改变了形参的值,而是:改变了形参的指向;而推出该函数后,形参被释放了,那么为形参动态分配的空间,也就没办法释放了,造成了内存泄露问题。。 举个例子吧: void get_Vale1(char*pt) { pt=(char*)malloc(strle...

ypchen_的博客 1145

成功解决安装cuda的时候,下载的文件自动消失,并且出现An unknown error has occurred

成功解决安装cuda的时候,下载的文件自动消失,并且出现An unknown error has occurred. 目录 解决问题 解决思路 解决方法 解决问题 安装cuda的时候,下载的文件自动消失,并且出现An unknown error has occurred. 解决思路 发生未知错误。 解决方法 很可能是因为当前电脑下载的cuda版本不适合当前电脑GPU支持的cuda版本! 推荐文章:CV:Win1..

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 7523

有关一级指针和二级指针的归纳总结

计导课讲到指针和动态内存分配,这里真是一个难点,很多概念容易混淆,有时候一个概念要查阅好多网站,看过很多博文才能理解,不过学习编程不就是这样嘛~~一定要想办法理解才行,所以今天归纳了关于一级指针和二级指针的知识供大家学习(中间有一些摘录,不太记录来源,如果有涉及到哪位仁兄的文章,请跟我说,我会加上来源链接哒~)(http://blog.youkuaiyun.com/bearray123/article/det

Peggy_Chang的博客 3333

python爬虫:采集求职者简历信息并进行人才分析

通过 Python 爬虫抓取求职者简历信息并进行人才分析,可以帮助企业快速筛选和匹配人才。但在实施过程中,必须严格遵守法律法规,确保数据来源合法合规。如果需要更复杂的分析,可以结合自然语言处理(NLP)和机器学习技术,进一步挖掘数据价值。

数据知道的博客 1万+

结构力学仿真软件:STAAD.Pro:结构抗震设计与STAAD.Pro应用_2024-08-10_11-49-29.Tex

STAAD.Pro是一款广泛应用于结构工程领域的仿真软件,由Bentley Systems开发。它能够进行结构分析和设计,支持多种结构类型,包括桥梁、建筑物、塔架等。STAAD.Pro提供了强大的建模工具,用户可以轻松创建复杂的结构模型,并进行静态和动态分析。软件还支持多种载荷组合,包括地震载荷,以及提供详细的报告和图纸输出,便于工程师进行设计和审查。STAAD.Pro是一款广泛应用于结构工程设计的软件,其界面直观,功能强大,能够进行结构分析与设计。菜单栏。

976

【算法竞赛入门练习题】strcpy()函数的模拟实现

【算法竞赛入门练习题】my_strcpy()函数的模拟实现

Sky*殇的博客 533

PCL 利用RANSAC改进的ICP算法

本文介绍了一种基于RANSAC改进的ICP点云配准算法。算法原理部分阐述了在ICP迭代过程中使用RANSAC剔除错误匹配点对的方法。

点云侠的博客 196

指针、数组指针、字符串指针、函数指针、 const指针

指针与数组理论加强: 指针变量的初始化 定义的同时进行初始化 int a = 5; int *p = &a; 先定义后初始化 int a = 5; int *p; p=&a; 把指针初始化为NULL int *p=NULL; int *q=0; 不合法的初始化: //指针变量只能存储地址, 不能存储其它类型 int *p; p = 250; // 错误写法 //给指针变量赋值时,指针变量前不能再加“*” int *p; *p=&a; //错误写法 指针注意事项 指针的指向是

编程一时爽爽一时 269

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

数组和指针的区别与联系(详细)

指针和数组的区别: 1.概念: 2.存储方式、初始化(指针数组、数组指针)、存储内容(求sizeof) 3.赋值 6.传参(函数指针、函数指针数组、函数指针数组的指针、野指针) 一、概念 数组:数组是用于储存多个相同类型数据的集合。 指针:指针相当于一个变量,但是它和不同变量不一样,它存放的是其它变量在内存中的地址。 二、赋值、存储方式、求sizeof、初始化等 1.赋...

cherrydreamsover的博客 14万+

假人有限元模型

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

C语言犄角旮旯的知识之不一样的指针

大家觉得指针的本质是什么呢,其实就是一个地址而已,指针这个词对于初学C语言的提醒来说,可能不是特别友好,其实大家换成地址,就好理解了。指针本质就是一个地址,每个地址对应着一个数值,对地址取这个值,便是把这个值取出来了。这样说,还是好理解了吧。......

勾栏听曲_0的博客 1809

visio安装包

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

【嵌入式C语言】多级指针

int **p;多级指针:存放地址的地址空间在内存的表现形式应用的图示:把毫不相关的内存组合成线性的关系二维指针在使用的时候一般使用p[0]p[1]p[2]……p[n]这个n有多大呢?在二维指针中,有个不成文的规定,假设,这时候二维指针就结束了!

weixin_63135906的博客 1758

C语言基础-基础指针

在C语言中,指针是非常重要的一个知识点,对于一个C语言的程序员来说,能否熟练的使用指针是非常重要的,也是区别程序员的好坏的一个标准。注:本内容全部为原创,这是我自己写的笔记指针是编程语言中的一个对象,是将内存的地址赋值给指针变量。它的值直接指向存在电脑存储器中另一个储存单元指针其实是地址地址就是变量指针就是变量存放地址的变量指针是用于存放地址的,地址是位移表示一块地址空间的指针的大小在32位平台是4个字节,在64位平台上是8个字节指针类型决定了指针进行解引用操作的时候,能够访问空间的大小。

恰柠的博客 1176

C语言拯救者 (指针初阶--7)

指针初阶

我心如火 1629

指针做形参做局部变量及内存分配

一级指针做形参:首先一定要明白形参和你传递参数的那个实参是两个不同的变量,即使同名也还依然不同。指针传递的是一个变量或者一个值的地址,但是它本身还是采用值传递的方式。即你不能使它指向另外一块地址,但是你可以改变它指向的空间里存的值。 二级指针做形参:二级指针也是传值,但是他指向的地址是个一维指针,所以可以改变二维指针指向的地址空间里的内容也就是要申请空间的一维指针,不能改变二维指针本身的值,

wufangna的专栏 878

C语言的指针

总结:指针就是地址,口语中说的指针通常指的是指针变量。指针变量就是一个变量,是用来存放地址的一个变量。

m0_56900257的博客 622

指针

数组与指针 数组与指针的区别与联系 一、概念 数组:数组是用于储存多个相同类型的数据的集合。 指针:指针相当于一个变量,但是它和不同变量不同,它存放的是其他变量在内存中的地址。 二、复制、储存方式、求sizeof、初始化等 1.赋值 同类型指针变量可以相互赋值,数组不行,只能一个一个元素的赋值 2.储存方式 数组 数组在内存中是连续存放的,开辟一块连续的内存空间。数组是根据数组的下标进行访问...

weixin_45927623的博客 223

指针做形参做局部变量以及内存分配

一级指针做形参:首先一定要明白形参和你传递参数的那个实参是两个不同的变量,即使同名也还依然不同。指针传递的是一个变量或者一个值的地址,但是它本身还是采用值传递的方式。即你不能使它指向另外一块地址,但是你可以改变它指向的空间里存的值。 二级指针做形参:二级指针也是传值,但是他指向的地址是个一维指针,所以可以改变二维指针指向的地址空间里的内容也就是要申请空间的一维指针,不能改变二维指针本身的值,

我不会编程,但不是完全不会,我会一点点 615

【C语言初阶】9 指针初阶

指针,指针变量的定义,野指针,指针数组

哈茶的博客 693

【C语言基础详细版】05. 指针全面详解:从内存管理到高级应用

本文全面介绍了C语言中指针的核心概念与应用。主要内容包括:1)内存分区基础与地址概念;2)指针的定义、运算符及分类;3)指针与变量、数组的关系;4)指针运算规则;5)指针数组与数组指针的区别;6)多级指针的应用;7)字符串与指针的关系;8)指针在函数中的应用(参数传递和函数指针)。文章通过大量代码示例,详细讲解了指针从基础到高级的各种用法,是掌握C语言指针的完整指南。

yuhuasheng1997的博客 608

每日一题(八)

文章目录10.1 内存碎片10.2 数组、字符串10.3 越界读写字符串10.4 malloc内存泄漏+free非法访问+二级指针传参10.5 求含位域的结构体大小 10.1 内存碎片 内部碎片的产生因为所有的内存分配必须起始于可被 4、8 或 16 整除(视 处理器体系结构而定)的地址或者因为MMU的分页机制的限制,决定内存分配算法仅能把预定大小的内存块分配给客户。假设当某个客户请求一个 43 字节的内存块时,因为没有适合大小的内存,所以它可能会获得 44字节、48字节等稍大一点的字节,因此由所需大小四舍

肥宅快乐博客 458
上一篇: 去除字符串中的重复字符(C语言)
下一篇: Linux内核源代码下载
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值