【C代码】数组作函数参数退回为一个指针

【数组作函数参数 退回为一个指针】
1 正确做法:把数组的内存首地址和数组的有效长度传给被调用函数
2 实参a 和 形参a 的数据类型本质不一样

形参中的数组 ,编译器会把它当成指针处理——这是C语言的特色。

只会分配四个字节(所分配连续内存空间的首元素的地址)的内存,不会分配4*7个字节的内存

void sortArray(int a[7], int num)

3 形参写在函数名后面的括号()里,和写在函数的函数体{}内是一样的,只不过是具有对外的属性而已.

 

#include "stdlib.h"
#include "string.h"
#include "stdio.h"

//void printArray(int a[7], int num)
//void printArray(int a[], int num)
void printArray(int *a, int num)
{
	int i = 0;
	for (i=0; i<num; i++)
	{
		printf("%d ", a[i]);
	}
}

//数组作函数参数,C语言会把它优化为一个指针
//只会分配四个字节的内存,不会分配4*7个字节的内存
void sortArray(int a[7], int num)
//void sortArray(int a[], int num)
//void sortArray(int *a, int num)
{
	int i , j , tmp ;
	int	num2 = 0;

	num2 = sizeof(a)/sizeof(a[0]);
	printf("num:%d \n", num2);
	//实参a 和 形参a 的数据类型本质不一样
	//形参中的数组, 编译器会把它当成指针处理——这是C语言的特色
	
	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;
			}
		}
	}
}

/*

void main()
{
	int i = 0, j = 0;
	int tmp = 0;
	int num = 0;
	int a[] = { 33, 654, 4, 455, 6, 33, 4 };

	num = sizeof(a) / sizeof(a[0]);

	printf("排序之前\n");
	for (i = 0; i < 7; i++)
	{
		printf("%d ", a[i]);
	}
	sortArray(a, num);
	printf("排序之后\n");
	printArray(a, num);

	printf("hello...\n");
	system("pause");
}
*/只会分配四个字节的内存,不会分配4*7个字节的内存
void sortArray(int a[7], int num)
//void sortArray(int a[], int num)
//void sortArray(int *a, int num)
{
	int i , j , tmp ;
	int	num2 = 0;

	num2 = sizeof(a)/sizeof(a[0]);
	printf("num:%d \n", num2);
	//实参a 和 形参a 的数据类型本质不一样
	//形参中的数组, 编译器会把它当成指针处理——这是C语言的特色
	
	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;
			}
		}
	}
}

/*

void main()
{
	int i = 0, j = 0;
	int tmp = 0;
	int num = 0;
	int a[] = { 33, 654, 4, 455, 6, 33, 4 };

	num = sizeof(a) / sizeof(a[0]);

	printf("排序之前\n");
	for (i = 0; i < 7; i++)
	{
		printf("%d ", a[i]);
	}
	sortArray(a, num);
	printf("排序之后\n");
	printArray(a, num);

	printf("hello...\n");
	system("pause");
}
*/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值