一维数组做函数参数的用法:
- 当一维数组做函数参数的时候,会退化为指针
- 一维数组做函数参数的时候,c/c++编译器会做优化
int a[10] ----->int a[] ---->int *a
所以数组作函数参数的时候只能传指针
3.函数调用的时候,把数组首地址和有效数据长度传给被调用函数才是最正确的做法
//在函数调用哪个的时候 实参的值机械的传给形参(c int数组场景)
关于形参的理解:
写在函数上形参变量,还是写在函数里面的变量,
从CC++编译的角度来讲,是没有任何区别的(分配4字节内存);
只不过是 写在函数上形参变量 ,具有对外的属性而已
下面给出程序具体实例
1. #include "stdlib.h" 2. #include "string.h" 3. #include "stdio.h" 4. 5. //当数组当做函数参数的话的时候会退化为指针 6. int printfArray(int a[]) //这里形参a[10]跟a[]效果一样 7. { 8. int i = 0; 9. int num = 0; 10. 11. num = sizeof(a) / sizeof(*a); //这里num值为1 12. printf("num=%d.\n", num); 13. for (i = 0; i < 10; i++) 14. { 15. printf("%d ", a[i]); 16. } 17. printf("\n"); 18. return 0; 19. } 20. 21. //int a[10] -=-->int a[] ---->int *a 22. //数组做函数形参的时候,如果在形参中定义int a[10]语句, 23. //c/c++编译器 会做优化,技术推演如下 24. //int a[10] -=-->int a[] ---->int *a 25. //总结:函数调用的时候,把数组首地址和有效数据长度传给被调用函数才是最正确的做法 26. //在函数调用哪个的时候 实参的值机械的传给形参(c int数组场景) 27. 28. //关于形参: 29. /* 30. 写在函数上形参变量,还是写在函数里面的变量, 31. 从CC++编译的角度来讲,是没有任何区别的(分配4字节内存); 32. 只不过是 写在函数上形参变量 ,具有对外的属性而已 33. */ 34. 35. 36. int printfArray04(int *a, int num) 37. { 38. int i = 0; 39. for (i = 0; i < num; i++) 40. { 41. printf("%d ", a[i]); 42. } 43. printf("\n"); 44. return 0; 45. 46. } 47. 48. 49. int sortArray(int a[]) 50. { 51. int i = 0, j = 0; 52. int tmp; 53. for (i = 0; i < 10; i++) //外层循环 54. { 55. for (j = i + 1; j < 10; j++) //内层循环 56. { 57. if (a[i] > a[j]) 58. { 59. tmp = a[i]; 60. a[i] = a[j]; 61. a[j] = tmp; 62. } 63. } 64. } 65. return 0; 66. } 67. void main() 68. { 69. //定义数组 打印数组 数组排序 70. int i = 0, j = 0; 71. int num2; 72. int a[10] = { 1,3,4,5,65,76,7,34,4,32 }; 73. int tmp; 74. 75. num2 = sizeof(a) / sizeof(*a); //这里num2值为10 76. printf("num2:%d \n", num2); 77. 78. printf("排序之前\n "); 79. printfArray04(a, 10); 80. sortArray(a); 81. 82. printf("排序之后\n "); 83. printfArray(a); 84. 85. system("pause"); 86. }