一维数组做函数参数的用法:
- 当一维数组做函数参数的时候,会退化为指针
- 一维数组做函数参数的时候,c/c++编译器会做优化
int a[10] ----->int a[] ---->int *a
所以数组作函数参数的时候只能传指针
3.函数调用的时候,把数组首地址和有效数据长度传给被调用函数才是最正确的做法
//在函数调用哪个的时候 实参的值机械的传给形参(c int数组场景)
关于形参的理解:
写在函数上形参变量,还是写在函数里面的变量,
从CC++编译的角度来讲,是没有任何区别的(分配4字节内存);
只不过是 写在函数上形参变量 ,具有对外的属性而已
下面给出程序具体实例
#include "stdlib.h"
#include "string.h"
#include "stdio.h"
//当数组当做函数参数的话的时候会退化为指针
int printfArray(int a[]) //这里形参a[10]跟a[]效果一样
{
int i = 0;
int num = 0;
num = sizeof(a) / sizeof(*a); //这里num值为1
printf("num=%d.\n", num);
for (i = 0; i < 10; i++)
{
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
//int a[10] -=-->int a[] ---->int *a
//数组做函数形参的时候,如果在形参中定义int a[10]语句,
//c/c++编译器 会做优化,技术推演如下
//int a[10] -=-->int a[] ---->int *a
//总结:函数调用的时候,把数组首地址和有效数据长度传给被调用函数才是最正确的做法
//在函数调用哪个的时候 实参的值机械的传给形参(c int数组场景)
//关于形参:
/*
写在函数上形参变量,还是写在函数里面的变量,
从CC++编译的角度来讲,是没有任何区别的(分配4字节内存);
只不过是 写在函数上形参变量 ,具有对外的属性而已
*/
int printfArray04(int *a, int num)
{
int i = 0;
for (i = 0; i < num; i++)
{
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
int sortArray(int a[])
{
int i = 0, j = 0;
int tmp;
for (i = 0; i < 10; i++) //外层循环
{
for (j = i + 1; j < 10; j++) //内层循环
{
if (a[i] > a[j])
{
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
}
return 0;
}
void main()
{
//定义数组 打印数组 数组排序
int i = 0, j = 0;
int num2;
int a[10] = { 1,3,4,5,65,76,7,34,4,32 };
int tmp;
num2 = sizeof(a) / sizeof(*a); //这里num2值为10
printf("num2:%d \n", num2);
printf("排序之前\n ");
printfArray04(a, 10);
sortArray(a);
printf("排序之后\n ");
printfArray(a);
system("pause");
}
扫描二维码关注公众号,回复:
5851889 查看本文章