数组做函数参数的退化问题

#include<stdio.h>
#include<stdlib.h>


void arraysort(int a[],int num)//===void arraysort(int *a,int num)
{
	int temp =0;
	int i =0,j=0;
	int num2 = sizeof(a)/sizeof(a[0]);//num2=1
	printf("num2:%d\n",num2);
	
	for(i = 0;i< num -1;i++)
	{
		for(j = i+1;j<num-1;j++)
		{
			if(a[i]>a[j])
			{
				temp = a[i];
				a[i] = a[j];
				a[j] = temp;
			}				
		}
	}		
}
void print_array(int a[],int num)
{
	int i =0;
	for(i=0;i< num;i++)
	{
		printf("%d",a[i]);
	}
}

int main()
{
	int a[] = {5,8,6,2,10};
	int i =0;
	int num = sizeof(a)/sizeof(a[0]);//num=5
	printf("num:%d\n",num);
	//数组做函数参数的退化问题,数组做函数参数退化为一个指针
	//把数组内存的首地址和数组的有效长度传递给被调用函数
	//实参的a和形参a数据类型本质不一样,形参数组a编译器会把它当成指针处理
	arraysort(a,num);
	print_array(a,num);

	system("pause");
	return 0;
}


#include<stdio.h>
#include<stdlib.h>

int main()
{
	int a;    //告诉编译器分配4个字节的内存
	int b[10];//告诉编译器分配40个字节的内存
	printf("b:%d,b+1:%d,&b:%d,&b+1:%d\n",b,b+1,&b,&b+1);
	//结论:1 b+1和&b+1结果不一样==》b代表数组首元素的地址 ,&b代表整个数组的地址
	//     2 b和&b结果一样      ==》数组首元素的地址和数组的地址一样
	printf("%d\n",sizeof(a));//4
	printf("%d\n",sizeof(b));//40
	//结论:数据类型的本质:固定大小内存块的别名
	system("pause");
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值