您的位置:首页 > 其它

数组做函数参数退化为指针

2015-12-31 10:25 357 查看
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

void printfArray(int *a)
{
int i = 0;
for (i=0; i<10; i++)
{
printf("%d ", a[i]);
}
}

//1.数组做函数参数,会退化为指针
void printfArray2(int *a, int num)
{
int i = 0;
for (i=0; i<num; i++)
{
printf("%d ", a[i]);
}
}

//2.在形参里面出现的char buf[30] int a[10] c/c++编译器会把它当做指针,也不会主动的多分配内存
//编译器在处理传参的时候不是复制整个数组,而是将数组转化为指针,所以数组作为参数的时候会退化为指针
 void printfArray3(int a[10])
{
int i = 0;
int num1 = sizeof(a);//4
int num2 = sizeof(*a);//4
int num = sizeof(a)/sizeof(*a);//1
printf("num1:%d, num2:%d, num:%d \n", num1, num2, num);
for (i=0; i<num; i++)
{
printf("%d ", a[i]);
}
}

void main()
{
int i = 0, j = 0;
int a[10] = {1, 3, 44, 2, 3, 44, 5, 5,6, 67};
int tmp = 0;

int num1 = sizeof(a); //数据类型不一样

printf("\n排序之前 %d:", num1);
// 	for (i=0; i<10; i++)
// 	{
// 		printf("%d ", a[i]);
// 	}
printfArray3(a);

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;
}
}
}

printf("\n排序之后:");
// 	for (i=0; i<10; i++)
// 	{
// 		printf("%d ", a[i]);
// 	}
printfArray3(a);

system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: