C语言 函数返回多个值方法

于2023.4.24修改:改变语序使其通顺,丰富数组及指针方法的说明。

通常我们都会遇到会要求我们利用相关步骤进行运算,并且其结果可能涉及到多个值,此时,利用函数较为方便,但是对于C语言来说,要求单一出口原则,只能返回一个值(return方法),这时就无法实现。

通常我们可以通过如下方法进行多个值的返回

1.建立数组,并将数组作为参数传入函数中,注:传入函数时无法使用sizeof(A)/sizeof(A0)来获得数组的个数具体可看:数组名作为函数参数以及sizeof用法_小时候挺菜的博客-CSDN博客

 主要的意思是说,将数组作为参数传入函数之后,其符号(A这个符号就不在代表A这个数组,跳出该函数之后仍然可以通过A来访问这个数组)就变成了指向第一个位置A[0]的指针,通过sizeof(A)得到的不在是数组A的大小,而是指向第一个位置的指针的大小。因此想要得到数组的长度,必须要单独传入一个单独的参数代表长度如:LEN,

数组长度的传入主要看你的需求是什么,比如说:只是想遍历该数组,数组的大小为已知就完全可以不传入,当然你也可以传入之后进行判断访问界限,以防止访问越界的情况。对于需要传入的情况,目前我还没用到,猜想应该是数组的长度在不同时刻会发生变化的情况下,传入数组长度对于防止数组越界访问的好处比较明显。

2.通过单一的指针,当我们需要得到的返回值在2个或几个,无法通过函数单一的返回时,除了通过数组进行赋值之外,我们还可以直接将对应的值定义之后,在对其进行指针的定义然后将指针传入,利用指针对该值进行修改。此处只传入一个指针,当然可以传入多个指针,其实运用数组传入的也是指针,只是数组的指针指向的是数组的首地址,并可通过这个首地址访问到所有的数组元素。

int divide(int a,int b,int *result){//此处int *result要求传入一个int型指针,在调用时传入对应的地址就可
	int ret=1;
	if(b==0) ret=0;
	else{
		*result=a/b;
	}
	return ret;
} 

3.通过结构体的指针进行运算,这种方法适合于要赋值的对象有多个属性/值,又有多个对象,我们就可以建立一个结构体,然后通过结构体的指针来实现。然后在函数中对结构体成员进行赋值就可实现。

你可能感兴趣的:(C语言自学,c语言)