C中指针与成员变量生命周期的示例

引言

本文针对于碰到的指针做一些记录。详见下面的示例。

示例一

返回char类型指针,使用局部静态数组。

#include <stdlib.h>char * GetTestMemory(void)
{static char p[] = "hello world";printf("src=%x\n",p);//数组首地址printf("Move=%x\n", p+1);//数组的首地址+1printf("ArrMove=%x\n", &p + 1);//整个数组的地址+1printf("==src=>%s\n", p);//数组p中的字符串printf("==src=>%s\n", p+1);//数组p+1后的字符串printf("==========================\n");printf("p[0] = %c\n",p[0]);//第一个字符printf("*p = %c\n", *p);//第一个字符return p;
}
void Test(void)
{char *str = GetTestMemory(); printf("===>str= %s\n",str);
}
int main()
{Test();return 0;
}

输出结果:
在这里插入图片描述

示例二

返回char类型的指针,使用局部数组。

 char * GetTestMemory(void)
{char p[] = "hello world";printf("src=%x\n",p);//数组首地址printf("Move=%x\n", p+1);//数组的首地址+1printf("ArrMove=%x\n", &p + 1);//整个数组的地址+1printf("==src=>%s\n", p);//数组p中的字符串printf("==src=>%s\n", p+1);//数组p+1后的字符串printf("==========================\n");printf("p[0] = %c\n",p[0]);printf("*p = %c\n", *p);return p;
}
void Test(void)
{char *str = GetTestMemory(); printf("===>str= %s\n",str);
}
int main()
{Test();return 0;
}

运行结果:
在这里插入图片描述
可以看出此时str输出的字符串为一串乱码。由于局部变量作为数组,其存储在栈区,返回数组的首地址p后赋值给char*指针str,局部变量在函数GetTestMemory()调用结束后生命周期结束,系统释放内存,此时str指针指向的内容(数组p的内存,已被释放)具有不确定性,故而输出乱码。

示例三

下面为一个常用但是很容易忽略的问题。在使用文件指针的时候,我们都记得需要打开,读写,关闭,但是关闭文件在调用fclose(FILE *)后就结束了嘛,没有,因为fclose()虽然关闭了文件句柄,但是文件句柄为一个指针,需要赋值为NULL,这里使用的是c语言,故而采用NULL。

FILE *fp = fopen(......);
if(fp != NULL)
{........fclose(fp);fp = NULL;//这里需要将fp赋空
}

16进制加减法参考链接:
https://blog.csdn.net/weixin_42108484/article/details/101380530

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523670.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从Spark Streaming到Apache Flink: 实时数据流在爱奇艺的演进 | 技术头条

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a;陈越晨转自&#xff1a;高可用架构本文将为大家介绍Apache Flink在爱…

Git 添加和提交组合命令

组合命令&#xff1a; git commit -am"修改记录说明"单条命令&#xff1a; git add 文件名 git commit -m"修改记录说明"

Storm精华问答 | Storm的配置需要注意什么问题?

戳蓝字“CSDN云计算”关注我们哦&#xff01;Apache Storm是一个分布式实时大数据处理系统。Storm设计用于在容错和水平可扩展方法中处理大量数据。它是一个流数据框架&#xff0c;具有最高的摄取率。今天&#xff0c;我们就挑一些Storm的安装配置问题来看看吧。1Q&#xff1a;…

ifndef与#program once的区别

概述 平时我们为了防止头文件的重复包含&#xff0c;会使用#ifndef或者#program once。这里记录一下它们之间的区别。 区别 ifndef需要定义宏名&#xff0c;且可以跨平台使用&#xff0c;#program once却是windows专用的&#xff1b;ifndef相对于#program once而言&#xff…

这可能是把策略模式讲的最通俗易懂得文章了!

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;周末无事&#xff0c;窝在家里面看《权力的游戏第八季》&#xff0c;看的很是津津有味…

忽略特殊文件

有些时候&#xff0c;你必须把某些文件放到Git工作目录中&#xff0c;但又不能提交它们&#xff0c;比如保存了数据库密码的配置文件啦&#xff0c;等等&#xff0c;每次git status都会显示Untracked files ...&#xff0c;有强迫症的童鞋心里肯定不爽。 好在Git考虑到了大家的…

C++中动态数组实现

实现动态数组动态数组示例代码运行环境运行效果动态数组 动态数组Vector可以动态扩展内存&#xff0c;其采用连续的内存空间&#xff0c;当内存空间不足&#xff0c;便以原来的容量的2倍或者1.5倍成倍的扩展&#xff0c;将原有的数组元素拷贝到新分配的内存空间中&#xff0c;…

华为面试改革,我们该怎么跟进?

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;近日&#xff0c;华为轮值董事长徐直军撰写了《关于公司高端精英类、软件类人才面试方…

使用GitHub

我们一直用GitHub作为免费的远程仓库&#xff0c;如果是个人的开源项目&#xff0c;放到GitHub上是完全没有问题的。其实GitHub还是一个开源协作社区&#xff0c;通过GitHub&#xff0c;既可以让别人参与你的开源项目&#xff0c;也可以参与别人的开源项目。 在GitHub出现以前…

C++中单链表的实现

单链表的实现单链表示例代码开发环境运行结果单链表 链表内存空间不一定连续&#xff0c;其扩展性较好。多余的不多说了。该文主要记录单链表的实现&#xff0c;该单链表含有一个非空的头节点。链表的操作实际上是对其指针域与数据域的操作。 示例代码 直接上代码&#xff1…

使用说明_预拌混凝土使用说明

尊敬的客户感谢您使用我公司的混凝土。为保证您的工程质量&#xff0c;我公司根据配制的混凝土性能&#xff0c;参与《预拌混凝土》GB/T14902-2003、混凝土施工有关标准以及工程施工过程中常见问题制定出本说明书和技术交底。敬请认真阅读并按本说明书和技术交底等规定的有关操…

【算法精讲】分享一道很不错的算法题

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a;帅地转自&#xff1a;苦逼的码农分享一道leetcode上的题&#xff0c;…

C++中实现Stack

栈的实现栈示例代码开发环境运行结果栈 栈本着先进后出的原则&#xff0c;来存取数据。作为数据结构中的一种&#xff0c;这里不多介绍相关栈。仅以此文记录C中栈的实现&#xff0c;可帮助提升编程能力与对栈的理解。 示例代码 直接上代码。 SeqStack.h #pragma once#defin…

使用码云

使用GitHub时&#xff0c;国内的用户经常遇到的问题是访问速度太慢&#xff0c;有时候还会出现无法连接的情况&#xff08;原因你懂的&#xff09;。 如果我们希望体验Git飞一般的速度&#xff0c;可以使用国内的Git托管服务——码云&#xff08;gitee.com&#xff09;。 和G…

vstar为什么登录不了_一手的闲鱼号,为什么现在闲鱼号一号难求

现在随着闲鱼不断被众人发现是一个新的发财之地&#xff0c;之后便各种有关闲鱼项目的方案是层出不穷&#xff0c;比如闲鱼店群啊&#xff0c;那么一个人顶多只能够拥有几个闲鱼号&#xff0c;那么对于一些想要在闲鱼里面赚取一笔的人是远远不够的&#xff0c;那么自然也就造成…

游戏直播行业真的如你想象般暴利? | Alfred数据室

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a;AlfredWu转自&#xff1a;Alfred数据室最近几年游戏直播行业火了&…

C++使用模板实现元素的反序

实现任意类型序列中元素的反序所涉知识点示例代码开发环境运行结果注意所涉知识点 阅读此文需要掌握的知识点&#xff1a;回调函数&#xff0c;模板类&#xff0c;类模板&#xff0c;栈。 示例代码 这里直接上代码。 #pragma once #include <Stack> using namespace …

Maven配置、使用

一、Maven安装与配置 1.1 下载maven安装包&#xff0c;解压即可使用 官网&#xff1a;http://maven.apache.org/download.cgi 1.2 配置maven环境变量 1.2.1 此电脑-【属性】-【高级系统设置】-【环境变量】-【建系统变量】 第一处&#xff1a;M_HOME 解压路径&#xff1a…

5G精华问答 | 5G的关键无线技术是啥?

5G的概念虽然很早就已经提出&#xff0c;但是对于大多数用户来说&#xff0c;真正听到并且对5G有了初步的了解还是在今年。今天就让我们来看看关于5G的精华问答吧。1Q&#xff1a;5G能干什么&#xff1f;A&#xff1a;5G将带来光纤般的“零”时延接入速率&#xff0c;同时将给网…

C++中实现链栈

链栈链栈简述示例代码开发环境运行结果注意链栈简述 链栈从概念上看是链表和栈的结合&#xff0c;含有栈先进后出的特性&#xff0c;也具有链表的动态增加节点的特性&#xff0c;这里相当于在链表的基础上增加只能从一端操作&#xff0c;且保持先进后出的特性。将头节点所在的…