C语言学习之函数知识总结
函数的定义和调用
函数是指一段封装好的代码块,可以做特定的任务或者返回一个值。在C语言中,函数可以通过以下方式定义:
返回值类型 函数名(参数1类型 参数1名, 参数2类型 参数2名, ...) {
//函数体
return 返回值;
}
其中,返回值类型
指的是函数计算出来的结果的类型,参数1类型
和参数2类型
指的是传递给函数的参数的类型,参数1名
和参数2名
则是参数的名称。函数名则是函数的标识符,用于调用函数。
函数的调用可以通过以下方式实现:
返回值变量名 = 函数名(参数1值, 参数2值, ...);
例如:
int add(int x, int y) {
return x + y;
}
int result = add(3, 7);
其中,函数add
用于计算两个整数的和,返回值为整数类型。在调用函数时,传递了两个整数类型的参数3和7,最终结果会保存在result
变量中。
函数指针
函数指针是一种特殊的指针,它可以指向函数。定义函数指针的语法如下:
返回值类型 (*指针名)(参数1类型, 参数2类型, ...);
例如:
int add(int x, int y) {
return x + y;
}
int (*p)(int, int) = add;
int result = (*p)(3, 7);
其中,p
是一个函数指针,它指向函数add
。在调用函数add
时,可以使用(*p)
的形式调用,传递两个整数类型的参数3和7,计算出的结果会保存在result
变量中。
递归函数
递归函数是指调用自身的函数。递归函数需要满足两个条件:
- 必须有一个基本解决方案,可以把问题的规模优化到非常小的情况下得到解决;
- 使用递归调用可以将问题转化为规模更小的相同问题的解决方案。
例如:
long long factorial(int n) {
if(n == 0 || n == 1) {
return 1;
} else {
return n * factorial(n-1);
}
}
int main() {
int n = 5;
long long result = factorial(n);
printf("%d! = %lld\n", n, result);
return 0;
}
该示例为计算$n!$的示例,使用了递归函数factorial
,在函数中进行了$n!$的计算,使用了递归调用实现。最后,函数返回$n!$的计算结果,该程序可以输出$5! = 120$。
示例1:冒泡排序函数
void bubble_sort(int nums[], int len) {
for(int i = 0; i < len-1; i++) {
for(int j = 0; j < len-i-1; j++) {
if(nums[j] > nums[j+1]) {
int temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}
}
该示例为冒泡排序的实现,使用函数bubble_sort
对传入的数组进行排序操作。其中,nums
是要排序的数组,len
是数组的长度。在函数实现中,使用了两个嵌套循环对数组进行冒泡排序。
示例2:快速排序函数
void quick_sort(int nums[], int left, int right) {
if(left >= right) {
return;
}
int i = left, j = right, pivot = nums[left];
while(i < j) {
while(i < j && nums[j] >= pivot) {
j--;
}
nums[i] = nums[j];
while(i < j && nums[i] <= pivot) {
i++;
}
nums[j] = nums[i];
}
nums[i] = pivot;
quick_sort(nums, left, i-1);
quick_sort(nums, i+1, right);
}
该示例为快速排序的实现,使用函数quick_sort
对传入的数组进行快速排序操作。其中,nums
是要排序的数组,left
和right
分别是数组的左右索引。在函数实现中,使用了基准元素的方法将数组分为左右两部分,左部分的元素比基准元素小,右部分的元素比基准元素大,在每个子数组中继续进行快速排序,直到数组被完全排序。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言学习之函数知识总结 - Python技术站