C语言下数组做参数的退回问题探讨
2018-02-18 17:33
260 查看
C语言下数组做参数的退回问题探讨
一般书写传参形式,我们列举一般数值传参样例// array.cpp: 定义控制台应用程序的入口点。 #include "stdafx.h" int main(int argc, char **argv) { int arry[] = {5,8,2,0,3,1}; int i, j, tmp; //查看当前数组状况 for (i = 0; i<6; i++) { printf("%d ", arry[i]); } printf("\n"); //冒泡排序 for (i = 0; i < 6; i++) { for(j=i+1; j<6; j++) if (arry[i] > arry[j]) { tmp = arry[i]; arry[i] = arry[j]; arry[j] = tmp; tmp = 0; } } //排序完成打印信息 for (i = 0; i<6; i++) { printf("%d ", arry[i]); } return 0; }
一般我们会将一些比较复杂的代码抽象成函数,有
// array.cpp: 定义控制台应用程序的入口点。 // #include "stdafx.h" void print_array(int arry[], int num) { int i; for (i = 0; i<num; i++) { printf("%d ", arry[i]); } } void sort_array(int arry[], int num) { int i, j, tmp; int num_cmp; num_cmp = sizeof(arry) / sizeof(arry[0]); printf("the num_cmp is %d\n",num_cmp); for (i = 0; i < num; i++) { for (j = i + 1; j<num; j++) if (arry[i] >= arry[j]) { tmp = arry[i]; arry[i] = arry[j]; arry[j] = tmp; tmp = 0; } } } int main(int argc, char **argv) { int arry[] = {5,8,2,0,3,1}; int num; //查看当前数组状况 print_array(arry, num); printf("\n"); num = sizeof(arry) / sizeof(arry[0]); printf("the num is %d\n", num); //冒泡排序 sort_array(arry,num); //排序完成打印信息 print_array(arry,num); printf("\n"); return 0; }
注意到:
这里我多加了一个变量num_cmp,而且我们直接查看输出结果,发现,两个不一样。
the num is 6 5 8 2 0 3 1 the num_cmp is 1 0 1 2 3 5 8 请按任意键继续. . .
那我们直接改成指针形式昵?
发现生成的效果是一样的,这里很明显看出,主函数的num和函数里面的num_cmp不一样。
原因解释:
形参arry和实参arry的数据类型不一样
形参中的数组,编译器会把它当成指针处理,我们也通过改变成指针类型得到了验证。
c语言在主调函数与被调函数之间通过指针来操作内存
void print_array(int *arry, int num) { int i; for (i = 0; i<num; i++) { printf("%d ", arry[i]); } } void sort_array(int *arry, int num) { int i, j, tmp; int num_cmp; num_cmp = sizeof(arry) / sizeof(arry[0]); printf("the num_cmp is %d\n",num_cmp); for (i = 0; i < num; i++) { for (j = i + 1; j<num; j++) if (arry[i] >= arry[j]) { tmp = arry[i]; arry[i] = arry[j]; arry[j] = tmp; tmp = 0; } } }
结论:
数组做函数参数是会退回一个指针,把数组的内存首地址和数组有效长度传递给被调函数。
实参的数组和形参的数组的数据类型不一样,形参中的数组,编译器会把它当作指针处理
本质上,形参写在函数上同和写在函数内,只不过具有对外属性。
特别标注:本篇博客来自传智播客学习所记录笔记。
相关文章推荐
- C语言下数组做参数的退回问题探讨
- C语言下数组做参数的退回问题探讨
- C语言下数组做参数的退回问题探讨
- C语言下数组做参数的退回问题探讨
- C语言下数组做参数的退回问题探讨
- C语言下数组做参数的退回问题探讨
- C语言下数组做参数的退回问题探讨
- C语言下数组做参数的退回问题探讨
- C语言下数组做参数的退回问题探讨
- C语言之数组做参数退化问题
- C语言一级指针、二级指针、数组作为参数传递需要注意的若干问题
- 黑马程序员---------C语言 关于数组被当作函数参数传递的问题
- C语言中数组作为函数参数的问题
- c语言 关于数组名作参数传递问题
- C语言多维数组参数传递问题
- 【C语言提高01】冒泡排序和数组做参数的问题
- C语言中 数组到底是不是指针和数组作为参数问题
- c语言 函数 用指针传递参数 问题
- c语言一维数组做参数传递给函数:
- C语言数组参数与指针参数