栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言栈帧概念和实参传值传址,数组做函数参数笔记

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言栈帧概念和实参传值传址,数组做函数参数笔记

栈帧:

        当函数调用时,系统会在stack空间上申请一块内存区域,用来供函数调用,主要存放形参和局部变量。(定义在函数内部)

        当函数调用结束,这块内存区域自动 被释放(消失)

 传值和传址:

 传值:

函数调用期间,实参将自己的值,拷贝一份给形参。

int main(void)
{
	int m = 23;
	int n = 57;
	printf("--before--m=%d,n=%dn",m,n);

	swap(m, n);

	printf("--after--m=%d,n=%dn",m,n);
	system("pause");
	return EXIT_SUCCESS;

}

int swap(int a, int b)
{
	int tmp = 0

	tmp = a;
	a = b;
	b = tmp;

	return 0;
}

        传址:

函数调用期间,实参将地址值拷贝一份给形参

int swap(int, int);
int swap2(int*, int*);


int main(void)
{
	int m = 23;
	int n = 57;

	printf("--before--m=%d,n=%dn",m,n);
	//函数调用
	//swap(m,n); //m/n 实参
	swap2(&m, &n);

	printf("---after-- m=%d,n=%dn", m, n);

	system("pause");
	return EXIT_SUCCESS;

}

int swap2(int* a, int* b)
{
	int tmp = 0;
	tmp = *a;
	*a = *b;
	*b = tmp;

	return 0;

}

输出:

 --before--m=23,n=57
---after-- m=57,n=23

地址值----》在swap函数找栈帧内部,修改了main函数栈帧内部的局部变量值

数组作为函数参数:

        void  BubblesSort  (int arr[10]) == void BubbleSort(int arr[]) ==void BubbleSort(int *arr)

传递的不再是整个数组,而是数组的首地址。(一个指针的大小)

所以,当整形数组做函数参数时,我们通常在函数定义中,封装2个参数。一个表数组首地址,一个表元素个数。

void BubbleSort(int arr[])
{

	int n = sizeof(arr) / sizeof(arr[0]);

	for (int i = 0; i < n - 1; i++)
	{
		for (int j = 0; j < n - 1 - i; i++)
		{
			if (arr[j] > arr[j + 1])
			{
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}

		}

	}

}

int main(void)
{
	int arr[] = { 5,3,6,2,1,4,7,8,56 };

	int n = sizeof(arr) / sizeof(arr[0]);

	BubbleSort(arr);
	for (size_t i = 0; i < n; i++)
	{
		printf("%d",arr[i]);
	}
	printf("n");

	system("pause");
	return EXIT_SUCCESS;
}

指针做函数返回值:

        int *test_func(int a,int b);

        指针做函数返回值,不能返回局部变量的地址值。

int m = 100;
int* test_func2(int a, int b)
{
	return &m;
}

int main(void)

{
	int* ret = NULL;
	 
	ret = test_func2(10, 20);

	printf("ret=%dn",*ret);

	system("pause");
	return EXIT_SUCCESS;

}

输出:

ret=100 

数组做函数返回值:

        c语言中不允许,只能写成指针形式

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1008214.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号