C语言:函数的参数(当数组作为函数参数时)

今天我在学习C语言中的函数时,遇到了一个非常有意思的问题:我们都知道在Java、JS、Python等语言中函数的定义时常会用到参数,我一直以来都认为函数的参数都是形参~~~~(看来还是我见识少了)

今天我在学习中,看到了这样的一个案例:(各位看官老爷请看)

#include <stdio.h>

void printAddress(int data){
	printf("形参daat的地址:%p\n",&data);
}

int main(){
	int data=10;
	printf("主函数中  实参  data的地址:%p\n",&data);
	printAddress(data);
	return 0;
}

在这里运行之后给到的答案是:

很显然,主函数中的全局变量data的地址和函数中形参的地址是完全不一样的(这里还涉及到了生命周期巴拉巴拉)。

在这里大多数初学者都会陷入一个误区,也是新学者的一个必踩坑,理所当然的认为在函数中所有的参数都是用完就扔(死渣男),要你了就建立一个临时地址(就是钟点房),用完了就destroy。

好好好!今天我有尝试了数组,属实是惊到我了:我一直以为,我天真的以为在函数中,是否定义数组的大小就会决定它是否会发生地址的改变。


//我天真的以为在函数中,是否定义数组的大小就会决定它是否会发生地址的改变
//我以为没有大小的,就是有点像指针,直接自报家门
void printAddress1(int arr[]){
	printf("printAddress1(int arr[])打印arr数组的地址:\n");
	printf("arr[0]=%d,address=%p\n",arr[0],&arr[0]);
	printf("arr[1]=%d,address=%p\n",arr[1],&arr[1]);
	printf("arr[2]=%d,address=%p\n",arr[2],&arr[2]);
	printf("=================================\n");
}

//我还天真的以为有规定数组大小的,就是彪子立牌坊,又装又立
void printAddress2(int arr[3]){
	printf("printAddress2(int arr[3])打印arr数组的地址:\n");
	printf("arr[0]=%d,address=%p\n",arr[0],&arr[0]);
	printf("arr[1]=%d,address=%p\n",arr[1],&arr[1]);
	printf("arr[2]=%d,address=%p\n",arr[2],&arr[2]);
	printf("=================================\n");
}

int main(){
	int arr[]={1,2,3};
	
	printf("打印arr数组的地址:\n");
	printf("arr[0]=%d,address=%p\n",arr[0],&arr[0]);
	printf("arr[1]=%d,address=%p\n",arr[1],&arr[1]);
	printf("arr[2]=%d,address=%p\n",arr[2],&arr[2]);
	printf("=================================\n");
	
	printAddress1(arr);
	printAddress2(arr);
	return 0;
}

但是,咱们计算机死板的很,只有1和0,实践告诉了我正确答案:

实践是检验理论的唯一标准,事实胜于雄辩,很明显在C语言中,在函数中的数组参数,无论你是否规定它的大小,他都是以地址的形式去冲他老家的。在这里就没有临时创建空间的说法啦,直接就是推水晶。

所以说,在函数中,对于数组内数据的改变,都是很现实的,直接“中出”,会直接改变里面的内容!

以上是我的浅薄理解,请各位看官老爷斧正!!!

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值