首页 > 后端开发 > 正文

C语言自定义函数如何返回数组(上) 客评价谭浩强C语言书到底好不好

2023-06-26 19:26:46 | 我爱编程网

C语言自定义函数如何返回数组(上)

C语言自定义函数如何返回数组(上)

最近看到一些同学问题,有提到说:如何在一个函数中返回数组呢?能否直接在自定义 函数中,写成char *类型返回值,直接返回呢?,代码如下:

直接返回str数组名(注意不需要加&,还有好多同学犯这个错)但事实上,运行结果并非正常,我们尝试在调用函数中输出,可以看到结果并非是原来内容(当然你的电脑输出可能还不是这个样子)

如下:

原因大家可以从str的属性入手,str本身是一个自定义函数中的局部变量,是一个数组有一百个字节,它的生命周期当然也随着它所在的函数一起,正所谓“一招天子一朝臣”,随着fun函数调用的结束,其中的各种局部变量也将被系统收回,理所当然的str数组这一百个字节也将被收回,所以”Hello www.dotcpp.com”这串字符串也就灰飞烟灭了!自然你在main函数里再输出肯定已经不是原来的内容了!
怎么样,可以理解吧!不过,还没有结束,依然有同学继续问,可为什么我换成下面这种写法就可以了呢?

我爱编程网

如下图:

答曰:这种写法情况下,str虽也属于是局部变量,但不是一个数组,而是一个指针,只有四个字节,存的是在常量区的字符串” Hello www.dotcpp.com”,但请注意,这个字符串在常量区,而不属于fun函数里的部分,全程序都可读,所以return之后依旧存在,返回的是str里的值,也就是字符串“Hello www.dotcpp.com”的首地址,是一个数,其实相当于把这个字符串的地址在str手里通过返回值转交到p里。

也可以打个比方:之前只有fun函数知道这个字符串,但现在已经马上不行了,临终前,交代:“我快不行了,赶紧把‘Hello www.dotcpp.com’的藏宝地址(字符串首地址)转交到main函数里!”

然后就return 快马加鞭的返回到main函数手里了!随后消失…

而后,main函数获得之后,你们也就知道了…

这样讲,大家能理解吗?

后期C语言逆向分析部分,也会有涉及到此处的原理,大家可以再深入学习理解。

同时,下篇我们将为大家讲解如何实现自定义函数的数组传递问题!

 

客评价谭浩强C语言书到底好不好


近来,总听到有一些吐槽谭浩强C语言入门这个本书的问题,在业内掀起一阵跟风行为,也令不少打算入门的同学选择困难,今天通过此文表达一个客观公正的观点。


我总结了一下吐槽谭浩强书不好的几个点:
1. 陈旧,有错误,比如void main问题
2. 太注重理论,过多++a+b++这种绕圈子的问题,太过应试不利于能力培养



其实,这本作为第一批清华大学出版,用于全国各地高校的第一本大规模推广的书籍,在当时资料匮乏、缺乏资源的年代,这本书已经是一本不可多得的好书了。错误、格式落后即便用现在的眼光看,也应该能够理解当时的处境,何况语言标准从C89、C90、C99多次大标准修订,我觉得这类问题大不可作为评判这本书不好的原因
另一个方便,许多朋友说这本书太过于纠结低级问题来回绕圈子,完全就是应试教学,根本培养不了编程人才,甚至因此贬低中国教育落后。我真的想说,这就是教育家与普通技术男的区别 ,如果你了解国情,作为从上到下的推广书籍的主编的时候,你就不会这么想了

其实,我觉得这些一条条的原因主要是应为一些对编程有更高要求,而看不上谭浩强C语言这种给初学者和小白的教材,甚至略有些“恃才傲物”的人们刻意放大的这本书的错误。
但如果你明白这本书是为了绝大部分C语言的学习者、编程入门的初学者等甚至很大一部分人是非计算机专业的人而准备,就明白这本书的创作目的了。所以,我们也会看到网上一些人们除了贬低这本书之外,还建议直接学习类似《C prime plus》、《C语言程序设计入门》翻译版等书籍了,笔者这里不完全赞同,唯一提醒的就是初学者要警惕“小马过河“的故事,知道自己“几斤几两”,选择适合自己的教材,才是正确的办法!


更多相关文章关注我爱编程网:www.52biancheng.com

免责声明:文章内容来自网络,如有侵权请及时联系删除。
标签: C++
与“C语言自定义函数如何返回数组(上) 客评价谭浩强C语言书到底好不好”相关推荐
如何用c语言在windows平台上开发php extension
如何用c语言在windows平台上开发php extension

如何用c语言在windows平台上开发phpextension何使用C语言发PHP扩展函数功能:php面整数符号数其内部实现其实longunsignedlong于32位机器说php能表示整数2^31-1般应用碰于2^31-1于2^32数能用字符串表示于mixedint_ext(stringin)说字符串in表示整数于2^31-1返整数于返字符串发扩展步骤:(首先需要载php源码载

2024-09-23 08:43:13
PHP与C语言的语法有什么不同
PHP与C语言的语法有什么不同

PHP与C语言的语法有什么不同PHP与C语言的语法有什么不同?PHP的基本语法和C是很相似的,可以说大部分编程语言的基本语法都是如出一辙的:顺序、选择(if)、循环(while)。不同之处有变量定义,还有实现的具体细节。但是,php主要是部署网站用的,所以大部分时候是要嵌在HTML语言里面的,并且与JS混合在一起,所以表面看上去很乱,远远没有C语言的单纯。以上是对格式方面的理

2024-09-04 16:58:18
C语言 timer函数 和time函数(php定时任务。求助)
C语言 timer函数 和time函数(php定时任务。求助)

C语言timer函数和time函数Timer()函数语法:Timer(interval{,windowname})参数:指定两次触发Timer事件之间的时间间隔,有效值在0到65之间。如果该参数的值指定为0,那么关闭定时器,不再触发指定窗口的Timer事件。windowname:窗口名,指定时间间隔到时要触发哪个窗口的Timer事件。省略该参数时,触发当前窗口的Timer事件返回值

2024-08-10 14:27:50
c语言可以写java吗
c语言可以写java吗

c语言可以写java吗c语言学完可以转java吗?当然可以转,但如果说你学C语言的目标是为了初步掌握编程基础,并打算学习更高级语言做web开发,那可以考虑直接去学java。C语言是高级语言的基础,也是高级语言入门的最佳选择之一,C语言面向过程写程序按部就班自由性比较大,java基础比较简单,没有语言基础的照样能学会。在你学了C语言之后,顶多了解了C语言的思想以及某些语法。但是在java

2024-04-08 21:31:14
PHP用到的C语言中的“指针”多吗?
PHP用到的C语言中的“指针”多吗?

PHP用到的C语言中的“指针”多吗?php没有指针的概念.=============如果学习PHP的话还有没有必要学习“指针”“结构体共同体”“编译预处理”等知识点?================单从php来说,的确是用不上.但是既然都学习了前面几章,何不顺带看一下呢.即使PHP中没有指针概念,但你要理解了指针概念,对PHP的引用概念搏侍就很容易理解了.编译预算处理

2024-07-23 15:07:52
为什么说php是c语言
为什么说php是c语言

php中的几个输出函数1echo();2print();3die();4printf();5sprintf();6print_r();7var_dump();1echo()可以同时输出多个字符串,可以多个参数,并不需要圆括号,无返回值。2print()只可以同时输出一个字符串,一个参数,需要圆括号,有返回值,当其执行失败时返flase.print的用法和C语言很像,所以会对输

2025-03-03 06:09:39
c语言可以做web开发吗?
c语言可以做web开发吗?

c语言可以做web开发吗?c语言可以做web开发的。用C语言进行web开发是非常不错的,因为C语言需要进行编译,经过编译之后,别人就看不了你的源代码,这对于保护您的知识产权是非常有积极意义的。用C语言开发web可以采用CGI的形式,可以直接接收浏览器传过来的参数进行处理,还可以做成PHP扩展的形式,编写好你自己的函数,在PHP网页里面直接调用。你还可以用C语言直接开发一个http服务

2025-03-09 11:02:49
Python到底是什么语言?
Python到底是什么语言?

Python到底是什么语言?简单来说,Python是一个程序开发语言,是一个:高级编程语言,其设计的核心理念是代码的易读性,以及允许编程者通过若干行代码轻松表达想法创意。Python是一门多种用途的编程语言,时常在扮演脚本语言的角色。一般来说,Python可定义为面向对象语的脚本语言:这个定义把面向对象的支持和全面的面向脚本语言的角色融合在一起。事实上,人们往往以“脚本”而不是“程序

2024-02-09 08:24:27