首页 > 后端开发 > 正文

C语言自定义函数如何返回数组(上) 关于c语言的一些概述性问题

2023-07-16 10:05:53 | 我爱编程网

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.c语言规定,变量命名必须符合标识符的命名规则,例如:float US$ 这样就是错误的,因为出现了非法字符:$
2.在整形常量中,不可包含”,“,比如:1,200
3.指数后面必须为指数;若想要表示字符”\”,应该写为:”\“
4.想要表示字符串常量,应该用双引号表示,如:”cd”,单引号表示字符常量
5.011表示八进制常量,0xabcd表示的是十六进制常量
6.’\0’表示空值,ascll值为0;’0’表示字符0,ascll值为48
7.在c语言中,八进制常量的开头数字是0,十六进制常量的开头数字是0x或0X
8.注意了。。。在e或E前面必须要有数字
9.115L代表的是115是长整型数据,是合法的;八进制常量开头是0而不是字母o
10.在字符赋值中,将”aa”赋予字符变量a是错误的
11.大小写转换公式:1> c =c + 32 ; 2>c =c=c - ‘A’+’a’; 3> c = (c-‘A’)%26 +’a’
12.字符串是用一对双引号括起来的字符序列,并用字符数组来存放
13.c语言中没有逻辑类型
14.若要保存带有多位小数的数据,用单精度可以,双精度也可以
15.整数类型可以无误表示自然数
16.处理包含不同类型的相关数据可以定义为结构体类型
17.c语言的标识符开头必须是字母或下划线,注意:关键字不能当作标识符
18.每个c程序中必须包含一个main函数,但不是每个文件必须有,而且,c程序有函数组成
19.c语言的源程序名后缀:.C , 目标文件的扩展名:.obj , 可执行文件扩展名似:.exe
20.c语言中数值常量不能加空格
21.运算符两边的运算数据类型可以不同,但是,结果与精度较高的保持一致
22.程序,可采用自顶向下,逐步细化的方法
23.运算符%的前后必须是整数
24.取模运算符和二元运算符具有左结合性,参与运算的量都为整型

今天关于c语言概述的总结知识点就到这里了,谢谢大家观看。

   

与“C语言自定义函数如何返回数组(上) 关于c语言的一些概述性问题”相关推荐
C语言自定义函数如何返回数组(下) 关于c语言的一些概述性问题
C语言自定义函数如何返回数组(下) 关于c语言的一些概述性问题

C语言自定义函数如何返回数组(下) C语言自定义函数如何返回数组(下) 通过上一篇的讲解,相信大家已经明白直接的return数组的问题以及原因了,今天我们将详细为大家讲解在函数中返回数组的常见办法。此类问题,应用场景往往为了解决函数间相互通信,比如某个函数内处理的完的结果数据需要交接给另一个函数的情况,那么一般来说,总结有以下三种: 直接使用全局变量:这种方法最方便,但此方法打

2023-07-16 10:11:57
C语言自定义函数如何返回数组(下) C语言自定义函数如何返回数组(上)
C语言自定义函数如何返回数组(下) C语言自定义函数如何返回数组(上)

C语言自定义函数如何返回数组(下) C语言自定义函数如何返回数组(下) 通过上一篇的讲解,相信大家已经明白直接的return数组的问题以及原因了,今天我们将详细为大家讲解在函数中返回数组的常见办法。此类问题,应用场景往往为了解决函数间相互通信,比如某个函数内处理的完的结果数据需要交接给另一个函数的情况,那么一般来说,总结有以下三种: 直接使用全局变量:这种方法最方便,但此方法打

2023-06-26 19:36:09
C语言自定义函数如何返回数组(上)
C语言自定义函数如何返回数组(上)

C语言自定义函数如何返回数组(上) C语言自定义函数如何返回数组(上) 最近看到一些同学问题,有提到说:如何在一个函数中返回数组呢?能否直接在自定义函数中,写成char*类型返回值,直接返回呢?,代码如下: 直接返回str数组名(注意不需要加&,还有好多同学犯这个错)但事实上,运行结果并非正常,我们尝试在调用函数中输出,可以看到结果并非是原来内容(当然你的电脑输出可能还不

2023-06-26 19:35:22
C语言自定义函数如何返回数组(上) 驳“C语言无用”论
C语言自定义函数如何返回数组(上) 驳“C语言无用”论

C语言自定义函数如何返回数组(上) C语言自定义函数如何返回数组(上) 最近看到一些同学问题,有提到说:如何在一个函数中返回数组呢?能否直接在自定义函数中,写成char*类型返回值,直接返回呢?,代码如下: 直接返回str数组名(注意不需要加&,还有好多同学犯这个错)但事实上,运行结果并非正常,我们尝试在调用函数中输出,可以看到结果并非是原来内容(当然你的电脑输出可能还不

2023-06-26 19:24:30
C语言自定义函数如何返回数组(下)
C语言自定义函数如何返回数组(下)

C语言自定义函数如何返回数组(下) C语言自定义函数如何返回数组(下) 通过上一篇的讲解,相信大家已经明白直接的return数组的问题以及原因了,今天我们将详细为大家讲解在函数中返回数组的常见办法。此类问题,应用场景往往为了解决函数间相互通信,比如某个函数内处理的完的结果数据需要交接给另一个函数的情况,那么一般来说,总结有以下三种: 直接使用全局变量:这种方法最方便,但此方法打

2023-06-26 19:22:04
C语言自定义函数如何返回数组(下) 驳“C语言无用”论
C语言自定义函数如何返回数组(下) 驳“C语言无用”论

C语言自定义函数如何返回数组(下) C语言自定义函数如何返回数组(下) 通过上一篇的讲解,相信大家已经明白直接的return数组的问题以及原因了,今天我们将详细为大家讲解在函数中返回数组的常见办法。此类问题,应用场景往往为了解决函数间相互通信,比如某个函数内处理的完的结果数据需要交接给另一个函数的情况,那么一般来说,总结有以下三种: 直接使用全局变量:这种方法最方便,但此方法打

2023-06-26 19:24:00
C语言中左值和右值的区别 C语言自定义函数如何返回数组(上)
C语言中左值和右值的区别 C语言自定义函数如何返回数组(上)

C语言中左值和右值的区别 C语言中左值和右值的区别 在C语言学习过程中,大家或许听到过左值和右值的概念,甚至在调试程序时编译器也会给出”leftoperandmustbel-value”即左操作数必须为左值!,今天我们将为大家详细解释这两个词,以及两者的区别! 简单而言,在赋值运算符“=”左边的就是左值,在赋值运算符“=&r

2023-06-26 19:18:56
C语言中左值和右值的区别 C语言自定义函数如何返回数组(下)
C语言中左值和右值的区别 C语言自定义函数如何返回数组(下)

C语言中左值和右值的区别 C语言中左值和右值的区别 在C语言学习过程中,大家或许听到过左值和右值的概念,甚至在调试程序时编译器也会给出”leftoperandmustbel-value”即左操作数必须为左值!,今天我们将为大家详细解释这两个词,以及两者的区别! 简单而言,在赋值运算符“=”左边的就是左值,在赋值运算符“=&r

2023-06-26 19:22:46