4.6指针变量作参数

Q:编写一个函数,该函数被主函数调用,通过该函数实现向主函数中定义的数组输入数据。

注意:函数的调用是在内存的堆栈中实现的。一旦函数调用结束,该函数内部的所有局部变量都会被释放掉。

本题目要求对主函数中的数组值进行修改,所以无法通过函数的返回值来实现该功能。要想通过被调函数修改主函数的数组值,只能将数组的首地址(指针)作为函数的参数进行传递,被调函数通过主函数传递来的数组首地址(指针)对数组的内容进行修改。

#include<iostream>
#include<cstdio>
using namespace std;

void inputarray(int *array,int len) {
	int i;
	for(int i=0;i<len;i++)
		scanf("%d",array+i);//  
}
int main()
{
	int i,array[10];
	printf("input data for array
");
	inputarray(array,10);
	for(int i=0;i<10;i++)
		printf("%d ",array[i]);
	printf("
");
	return 0;
}

  本函数中的inputarray()的实参array是数组名,是一个地址常量,表示数组的首地址。形参的array是一个指针变量,用来接收实参传递过来的数组的首地址。

  对于本题,函数inputarray()的形参也可以定义为int array[]的形式,但是必须注意这种形式的形参只限于数组首地址的传递。对于一般的指针传递,形参还是需要定义为指针变量的形式。在调用函数scanf()中,参数array+i表示指向数组中第i个元素的指针,也就是数组第i个元素的地址,等价于&array[i]

拥抱明天! 不给自己做枷锁去限制自己。 别让时代的悲哀,成为你人生的悲哀。
原文地址:https://www.cnblogs.com/dd2hm/p/6750120.html