| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 经典的笔试题解析《高质量C/C++编程》 -> 正文阅读 |
|
[C++知识库]经典的笔试题解析《高质量C/C++编程》 |
对于《高质量C/C++编程》,想必这个已经是早已成名的经典书籍了!!在此,笔者借用两三个题目!! 解析下面代码:(错误示列,请勿模仿)正确的代码,在后面部分!!!
该错误代码的运行结果为: ? 该段代码的运行思路: 解析: 1。首先在main 函数里面走到test函数,test函数里面定义了一个变量str,str里面存放的是一个空指针(NULL),通过getmoney函数的调用,将str传递过去,将str这个变量本身传递过去,而p也是个指针变量,将str里面的内容(NULL)传给变量p,即p得到的也是空指针(NULL),在getmoney函数里面,开辟了100个字节的空间,强制类型转化为:char*类型(返回类型),将这100个字节空间的起始地址放在p里面,(假设起始地址为:0x003f4056),即,此时的p,就间接指向了那100个字节空间的起始地址,但是,p是一个指针变量,给p里面放东西了,那str会发生改变吗??答案是:不会影响str!!!原因;str与p不是同一个变量(把地址放在p里面跟str没有关系)在test函数中,此时str仍为空指针!!在strcpy(str,"hello world")中,将会出现错误!!将“hello world "放在str里面,必然会涉及解引用操作!但是对于空指针,该如何进行解引用操作??故,出现了错误!! 2.对于printf(str)? 这个写法没有错误!! ? (1)。printf(”hello world"); printf函数在打印的时候,传递的不是hello world ,而是传给printf的为‘h'的地址!! (2)。char * p="hello world"? ,在这个里面:hello world 是一个字符表达式,相当于:printf(p) ,首字符h的地址放在p里面!!即,p指向’h'!
经过上面的简短分析,我们可以这样写正确的代码:
运行情况为: ?具体的解析为: 在test函数内部,创建str,在str里面,刚开始存放的是NULL(空指针),通过getmoney函数将str的地址传过去!假设str的地址为:0x0012ff40(一级指针的地址,需要用二级指针来接收)即指针变量p来接收,即,p里面存放的就是0x0012ff40,即,p指向str,而*p = (char*)malloc(100);开辟了100个字节的空间放在*p里面去,即放在str里面,假设,这100个字节的空间的起始地址为:0x34ff000045,所以,将0x34ff000045,放在str里面去了,strcpy(str, "hello world");把 hello world拷贝到str所指向的空间(malloc函数开辟的100个自己的空间),最后,用完了再释放掉,然后再置为NULL(空指针)!!! 代码的运行结果为: ? 另外一种也是正确的写法为:
上述代码的运行结果为: ?本文就先到此结束!! |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/11 12:54:26- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |