cs61c笔记-Lecture4+数组作为函数参数使用

数组作为函数参数使用

一、核心思想:

数组变量传入函数后,转变成指针变量,同时传递类型为地址传递

二、传递方式:

数组作为函数参数,传递的三种方式

1. f ( int A[], int n) {XXX}

形式未定义大小数组变量+数组大小
最安全的一种形式。在遍历数组时,编译器不会检查越界,所以加入size变量限制遍历大小可以避免越界。

void print_array(int A[], int n) {
	for (int i = 0; i < n; ++i) {
		printf("%d", A[i]);
	}
	printf("\n");
}
2. f ( int *A) {XXX}

形式指针变量

void print_array_2(int *A) {
	for (int i = 0; i < 3; ++i) {
		printf("%d", A[i]);
	}
	printf("\n");
}
3. f ( int A [2] ){XXX}

形式定义大小数组变量

void print_array_3(int A[3]) {
	for (int i = 0; i < 3; ++i) {
		printf("%d", A[i]);
	}
	printf("\n");
}
三、综合实例

-应用:数组作为参数传递、函数指针
使用第一种数组传递的方式

//本实例中函数的声明和实现分开实现
int x10(int), x2(int);
void mutate_map(int[], int, int (*)(int));
void print_array(int[], int);//数组-首元素指针+长度(数组不会有越界提醒)

int x2(int n) { return 2 * n; }
int x10(int n) { return 10 * n; }
void mutate_map(int A[], int n, int(*fp)(int)) {//将函数指针作为函数参数,泛化性好
	for (int i = 0; i < n; ++i) {
		A[i] = (*fp)(A[i]);
	}
}
void print_array(int A[], int n) {
	for (int i = 0; i < n; ++i) {
		printf("%d", A[i]);
	}
	
int main() {
	int A[3] = { 1,2,3 },n=3;
	print_array(A, n);
	mutate_map(A, n, &x2);
	print_array(A, n);
	mutate_map(A, n, &x10);
	print_array(A, n);		
	return 0;
}

解释
1.函数说明
–x2,x10对整形进行x10和x2操作的函数。
–mutate_map为对每个数组元素操作
–print_array 为打印每个数组元素

2.实例功能说明
–因为数组传递是地址传递的一种,所以每次的改变是永久性的,于是结果为第一次:1,2,3,第二次:2,4,6,第三次:20,40,60.
–将x2,x10函数通过函数指针作为参数传递,实现了操作数组元素操作方法分离

是不是感觉很厉害,有搭积木的感觉了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值