有网站地图的网站,工作证模板word,wordpress 5.0.3文章编辑,全屏wordpress主题本文介绍了C语言的return语句及其它在C语言函数中的作用#xff0c;以及介绍了二维数组和一维数组传参时的一些注意事项和使用数组传参时的方法。
若没有学习过C语言的一维数组和二维数组#xff0c;建议参考如下文章#xff1a;
C语言#xff08;15#xff09;--------…本文介绍了C语言的return语句及其它在C语言函数中的作用以及介绍了二维数组和一维数组传参时的一些注意事项和使用数组传参时的方法。
若没有学习过C语言的一维数组和二维数组建议参考如下文章
C语言15--------------一维数组-CSDN博客
C语言16----------二维数组-CSDN博客
一、return语句
1.return语句后面可以是一个数值也可以是一个表达式若是一个表示式则计算表达式后返回表达式的值。
参考return语句后面是一个数值
#include stdio.hint test(int x,int y)
{int z 0;z x y;return z;
}int main()
{int add 0;add test(4,5);printf(add%d\n, add);return 0;
}
运行结果 参考return语句后面是一个表达式
#include stdio.hint test(int x,int y)
{return x y;
}int main()
{int add 0;add test(4,5);printf(add%d\n, add);return 0;
}
运行结果 2.可以直接使用一个return适合的函数返回类型是void型。
同时return语句执行时函数将彻底返回后边的代码不再执行。
实验代码
#include stdio.h//打印1到n的数字
void Print(int n)
{if (n 1)return;//若传入的数字小于1函数提前返回提前结束//不使用break的原因是因为break通常用于循环中int i 0;for (i 1; i n; i){printf(%d ,i);}
}int main()
{int re 0;Print(-2);//打印1到100的数字return 0;
}
此用法使用时函数提前返回提前结束。
(1)启动调试 2逐语句调试直至进入函数前 3到达Print函数时逐语句调试进入函数体内部 4Print函数体内部逐语句调试 函数体内if的判断 n-2n是小于1的执行return语句跳出函数体。 跳出函数体回到主函数中 主函数中逐语句调试直至退出。 3.return返回的值和函数的返回类型不一样时系统将隐式转换为函数的返回类型。
实验代码
#include stdio.hint test()
{return 3.5;
}int main()
{int re 0;retest();printf(re%d\n,re);return 0;
} 4. return语句执行时函数将彻底返回后边的代码不再执行。
实验代码
#include stdio.hint test()
{return 3.5;printf(hehe\n);
}int main()
{int re 0;re test();printf(re%d\n, re);return 0;
}
运行结果 从运行结果中可以看到test函数执行return语句后不再执行return语句后面的printf函数。
分析
1启动调试 2逐语句调试 5.若函数中存在if等分支语句要保证每种情况下都有return返回否则会有编译错误。
实验代码
#include stdio.hint test(int n)
{if (n % 2 1)return 1;
}int main()
{int re 0;re test(4);printf(re%d\n, re);return 0;
}
运行结果 出现警告的原因是忽略了为偶数的情况当输入偶数时没有返回值。
修改
代码
#include stdio.hint test(int n)
{if (n % 2 1)return 1;elsereturn 0;
}int main()
{int re 0;re test(4);printf(re%d\n, re);return 0;
}
运行结果 二、数组作为函数的参数
例如在一个数组中存放了1到10的数字现在需要使用函数实现将这10个数字都变成0。怎么编写这个函数呢
首先函数要遍历1到10的数字。
其次把这10个数字都赋值成0。
#include stdio.h//函数的功能将数组中的内容都变成0
void Set_Arr(int arr2[], int sz2)
{int i 0;for (i 0; i sz2; i){arr2[i] 0;}
}int main()
{int arr1[] {1,2,3,4,5,6,7,8,9,10};int sz1 sizeof(arr1) / sizeof(arr1[0]);Set_Arr(arr1,sz1);return 0;
}
注意事项 1.函数的形参名和实参名可以一样。此处为了方便在调试窗口中观察使用了不同的名字。
2.数组传参写的是数组名对于数组知识不扎实的可以参考我之前写的博客
C语言15--------------一维数组-CSDN博客
3.对于一维数组形参写的是数组的形式并且在形参书写的时候可以省略数组的个数。
4.对于二维数组形参写的是数组的形式并且在形参书写的时候可以省略数组的行数但是不可以省略数组的列数。
对于二维数组不了解的可以参考我的博客
C语言16----------二维数组-CSDN博客
5.数组传参后形参的数组和实参的数组是同一块空间改变形参的数组就是改变实参的数组请看下面的调试过程
1启动调试 2逐语句分析进入函数的内部 3打开监视窗口监视arr1和arr2 我们可以看到arr1和arr2的地址是一样的说明共用了同一块内存如果修改了arr2中的内容那么arr1中的内容也会被修改。
4修改成功 如果学会了数组的传参那么现在我们再为刚刚那个例子写一个函数实现数组内容的打印。
参考代码
#include stdio.h//函数的功能将数组中的内容都变成0
void Set_Arr(int arr2[], int sz2)
{int i 0;for (i 0; i sz2; i){arr2[i] 0;}
}//函数的功能打印数组中的内容
void Print_Arr(int arr3[], int sz3)
{int i 0;for (i 0; i sz3; i){printf(%d ,arr3[i]);}printf(\n);//换行若此函数复用时也可以区分数字
}
int main()
{int arr1[] {1,2,3,4,5,6,7,8,9,10};int sz1 sizeof(arr1) / sizeof(arr1[0]);Print_Arr(arr1, sz1);//数组内容改变前Set_Arr(arr1,sz1);Print_Arr(arr1, sz1);//数组内容改变return 0;
}
运行结果 将一个二维数组中的数字全部替换为1。 参考代码
#include stdio.h
#define Column 6//将二维数组中的内容全部替换为1
void Set_Two_Arr(int arr2[][Column], int ROW1,int Column1)
{int i 0;for (i 0; i ROW1; i){int j 0;for (j 0; j Column1; j){arr2[i][j] 1;}}
}//打印二维数组
void Print_Two_Arr(int arr3[][Column], int ROW2, int Column2)
{int i 0;for (i 0; i ROW2; i){int j 0;for (j 0; j Column2; j){printf(%d , arr3[i][j]);}printf(\n);//避免所有的数字都在一行}printf(\n);//换行若此函数复用时也可以区分数字
}
int main()
{int arr1[][Column] { {1,2,3,4,5,6},{2,3,4,5,6,7},{3,4,5,6,7,8} };int sz 0;sz sizeof(arr1) / sizeof(arr1[0][0]);//计算二维数组中的个数int ROW sz / Column;Print_Two_Arr(arr1, ROW, Column);//数组内容改变前Set_Two_Arr(arr1,ROW,Column);Print_Two_Arr(arr1, ROW, Column);//数组内容改变return 0;
}
运行结果 二维数组传参时形参和实参所用地址一样的 对于数组的传参做如下的总结
函数的形参与实参的个数要匹配。函数的实参是数组形参的形式也可以写成数组。形参若是一维数组则数组的大小可以忽略不写。 形参若是二维数组则数组的行可以忽略不写但是列数一定要写。数组传参不会创建新数组这是因为数组传参的形参和实参的地址是同一块的。形参操作的数组和实参的数组是同一个数组。