C语言中函数是如何存储的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中函数是如何存储的相关的知识,希望对你有一定的参考价值。

事情是这样的。。最近在看 函数指针 。。那其中说 此指针 指向的是函数 的 入口地址 ???那就突然想问了。。那函数在内存中是如何存储的??有入口地址,那也有出口地址吗?希望给出解释。。谢谢啊 (只要回复说出自己的见解,都会有鱼币的哦,最多3次。。)

1. 代码本身是存储在内存的代码段中的,而函数没有说存储的概念,函数调用时是通过栈来实现的。
2.在函数体内声明的变量在默认情况下都是auto存储类型
在代码块之间传递信息的一种方法就是使用外部变量。当一个变量在函数的外部被声明时,安的存储空间是永久分配的,安人存储类型是extren.外部变量的声明看上去和函数或代码块内部所声明的变量一样。外部变量对于它之后的所有函数都有效。在代码块或函数后,外部变量仍然存在。
3.static的基本用途是允许一个局部变量在重新进入代码块时能够保持原来的值。这和自动变量形成了鲜明的对比,自动变量在代码块时会被销毁,再次进入这个代码块时,它必须重新进行初始化。
4.egister存储类型告诉编译器相关的变量应该改量存储在高速度的寄存器中。使用register存储类型的目的一般是为了提高执行速度,但是,register声明只是向编译器所提出的“建议”,并非强制要求。
参考技术A 建议看看小甲鱼的win32汇编,或者看看天书夜读这本书也行,操作系统里面专门讲了这一章,每个函数调用都是跟内存栈相关的,只要能看懂内存栈,上面的就能明白了,说起来是肯定不是一句话两句话能说明白的 参考技术B 代码本身是存储在内存的代码段中的,而函数没有说存储的概念,函数调用时是通过栈来实现的。 参考技术C 了解一下, 参考技术D 表示我也是进来了解的

C语言中函数调用怎么返回两个值

在主函数中调用了一个函数,我希望能有两个返回值,在调用函数中怎么去return?好像默认的是只能返回一个值吧!各位,帮帮忙(C 语言)

在C语言中,函数只能返回一个值,要返回两个值,可以改换思路,通过其它方式做到。
1 建立数组,返回指针。
在要返回的两个值类型相同时,可以用创建数组的方式,将要返回的值存在数组中,并返回数组首地址,这样就可以实现返回两个值的效果。
需要注意的是,要返回数组首地址,那么返回的值不可以是局部变量,有如下几种是可以的:
a) 使用静态局部变量存储,并返回地址;
b) 使用全局变量存储,返回地址;
c) 函数中动态分配内存,并返回申请到的地址,此种方法需要注意,在使用后需要释放;
d) 在参数中传入数组地址,并返回。即返回的实际上是主调函数中的变量地址。

2 建立结构体,返回结构体变量。
将需要返回的值,写成结构体形式,并返回结构体变量,这样可以实现一个返回值中含有多组数据。

3 当数据规模较小时,可以采用将小规模数据合并为大规模数据的方式,进行返回。
比如,需要返回两个char型数据时,可以通过返回一个short数据,高地位分别存储各自的值。

除以上方法外,还可以不使用返回值的方式,而是通过函数参数传值,或者全局变量传值等方式,将要返回的值回传给主调函数。
参考技术A return 只能同时返回一个值,要想返回多个值,可以将变量定义为static(静态的),这样在定义变量是就给它分配了内存空间,当函数生命周期结束时,变量的值任然存在,其他函数也可以使用它的值。也可以用指针变量作为函数的形参,改变指针指向的内容,也能达到改变变量值的目的。这两种方法就相当于返回多个值了。本回答被提问者采纳 参考技术B 函数是不能直接返回两个值的,不过可以通过数组,列表,链表等方式,返回多个值。例如
int
a[]
f(),这个函数返回值就是一个整型的数组,如果你要返回两个值,可以定义数组长度为2,a[0]保存第一个值,a[1]保存第二个值。
参考技术C 利用传入指针参数做返回值

例子:
矩阵行列转换,其中b[M][N]就相当于是函数返回的数组

#include "stdio.h"

#define M 3
#define N 2

void swap(int a[M][N],int b[N][M])
int i,j;
for(i=0;i<M;i++)
for(j=0;j<N;j++)
b[j][i]=a[i][j];




void main()
int i,j;
int a[M][N],b[N][M];
for(i=0;i<M;i++)
for(j=0;j<N;j++)
printf("a[%d][%d]=",i,j);
scanf("%d",&a[i][j]);


swap(a,b);
for(i=0;i<M;i++)
for(j=0;j<N;j++)
printf("%d ",a[i][j]);

printf("\n");

for(i=0;i<N;i++)
for(j=0;j<M;j++)
printf("%d ",b[i][j]);

printf("\n");

参考技术D 在传递给函数的变量中返回。return应该返回的是运行状态,而不是执行之后的运行结果。这是一个普遍的误解……

以上是关于C语言中函数是如何存储的的主要内容,如果未能解决你的问题,请参考以下文章

C语言 如何给指针数组划分动态存储空间

C语言如何获取电脑实时时间

c语言中如何定义动态数组

c语言 动态数组

C语言函数传递二维数组

C语言中如何使用fread