形参是指针
当形参是指针时,实参应该是地址。
地址型表达式:其代表的地址用来为形参指针赋值,可以是变量的地址、数组首地址、指针数组元素、已经赋值的指针变量
形参是数组(实际上并不是数组,其本质为指针)
当形参是数组时,实参应该是地址。实参可以是变量的地址、数组首地址、指针数组元素、已经赋值的指针变量。
其实上边两种情况是一种情况,即形参为指针时。
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
//void printArray(int a[], int num)
void printArray(int *a, int num)
{
int i = 0;
for (i; i < num; i++)
{
printf("%d ", a[i]);
}
}
//void sortArray(int a[], int num)
void sortArray(int *a, int num)
{
//实参的a 和 形参的a 的数据类型本质不一样
//形参中的数组 ,编译器会把它当成指针处理 这是C语言的特色
int i,j,tmp;
for(i=0;i<num;i++)
for (j = i + 1; j < num; j++)
{
if (a[i] > a[j]) {
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
}
//数组做函数参数退回为一个指针,
//1 正确做法:把数组的内存首地址和数组的有效长度传给被调用函数
//2 //实参的a 和 形参的a 的数据类型本质不一样
//形参中的数组 ,编译器会把它当成指针处理 这是C语言的特色
//排序 本质也剖析
//3 形参写在函数上,和写在函数内是一样的,只不过是具有对外的属性而已.
void main()
{
int a[] = {22, 12, 34, 56, 23, 45, 65, 33};
int num = 0;
num = sizeof(a) / sizeof(a[0]);
printf("num:%d\n", num);
printArray(a, num);
sortArray(a, num);
printArray(a, num);
system("pause");
return;
}
/*
num:8
22 12 34 56 23 45 65 33 12 22 23 33 34 45 56 65
*/