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

5.3 函数与数组(数组实参的相关知识点)

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

5.3 函数与数组(数组实参的相关知识点)

先看一段案例:
代码如下:

#include 
void printData(int array[3])
{
	int i;
	printf("printData:array的大小是:%dn",sizeof(array));
	for(i=0;i<3;i++){
		printf("%d ",array[i]);
	}
	putchar('n');
}

int main()
{
	int array[3]={1,2,3};
	printf("main:array的大小是:%dn",sizeof(array));
	printData(array);      //数组名当成实际参数
	return 0;
}

在编译后,编译结果如下:

将数组的元素改成10个元素,编译结果如下:

综合上述的案例,我们可以看出,形参中不存在数组的概念,即便中括号中约定了数组大小也无效。传递的只是一个地址而已,是数组的首地址(8个字节)。

而且在操作系统中,我们也是用8个字节来表示一个地址。

以上的代码可能会存在某些问题,但是我们为了验证某些东西,无伤大雅,在此,我们仍然可以看出sizeof的妙用(它是一个关键字)

#include 
void printData(int array[],int len)
{
	int i;
	printf("printData:array的大小是:%dn",sizeof(array));
	for(i=0;i 

前文提到

传递的只是一个地址而已,是数组的首地址。

既然它是传递一个地址,那么我们可以直接传递第一个元素的地址即可。

#include 

void printData(int array[],int len)
{
	int i;
	printf("printData:array的大小是:%dn",sizeof(array));
	for(i=0;i 

下面,再看看两段相似代码的编译结果对比:

第一段:
1、代码:

#include 
void changeData(int data)
{
	data=data+100;
	printf("data的数值为%d,地址为%pn",data,&data);
}

int main()
{
	int data=30;
	changeData(data);
	printf("data的数值为%d,地址为%pn",data,&data);
	return 0;
}

2、编译结果:

从编辑结果来看,两个data的地址不同。

第二段:
1、代码:

#include 
void changeData(int data[0])
{
	data[0]=data[0]+100;
	printf("data的数值为%d,地址为%pn",data[0],&data[0]);
}

int main()
{
	int data[2]={30,50};
	changeData(data);
	printf("data的数值为%d,地址为%pn",data[0],&data[0]);
	return 0;
}

2、编译结果:

从编译结果来看,两个data的地址相同。

总结: 对于普通的数值,传递的是数值,但操作的是不同的内存空间。 对于数组而言,数组名当作实参,传递的是地址,即相同的内存空间。

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

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

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