`

C中关于数组参数的传递

 
阅读更多

编写一个对数组进行操作的函数,目的是返回数组内所用元素的和。

 

第一种形式:函数原型为int sum(int ar[],int n)

 

#include<stdio.h>

#define SIZE 4
int sum(int ar[],int n);

int main(int argc,char *argv[])
{
	int arrays[SIZE] = {1,2,3,4};
	long answer;

	answer = sum(arrays,SIZE);
	printf("total:%ld.\n",answer);
	printf("the size of arrays is %ld bytes.\n",sizeof(arrays));
	return 0;
}

int sum(int ar[],int n)
{
	int total;
	
	for(int i =0; i < n; i++)
		total += ar[i];
	printf("the size of ar is %zd bytes\n",sizeof ar);
}

 

程序运行的结果:

  the size of ar is 4 bytes

total:10.

the size of arrays is 16 bytes.

请按任意键继续. . .

可以看出ar本身不是一个数组,它是一个指向arrays的首元素的指针。

 

第二种形式: 函数原型:int sum(int *ar,int n)

 

#include<stdio.h>
int sum(int *a,int n);
#define SIZE 4
int main(int argc,char *argv[])
{
	int arrays[SIZE] = {1,2,3,4};
	long answer;

	answer = sum(arrays,SIZE);
	printf("total:%ld.\n",answer);
	printf("the size of arrays is %ld bytes.\n",sizeof(arrays));
	return 0;
}

int sum(int *ar,int n)
{
	int total = 0;   //要初始化
	for(int i =0; i < n; i++)
		total += ar[i];       //ar[i] 与*(ar +i)相同
	printf("the size of ar is %d bytes\n",sizeof ar);
	return total;
}
 

 

运行结果与第一种形式一样

 第一种和第二种方式好像是一样的吧?

 

第三种方式:传递数据开始与结束地址。函数原型:

 

#include<stdio.h>

#include<string.h>
#define SIZE 4

int sum(int *start,int * end);
//void swap(int * a,int * b);
int main(int argc,char *argv[])
{
	int arrays[SIZE] = {1,2,3,4};
	long answer;

	answer = sum(arrays,arrays + SIZE);
	printf("total:%ld.\n",answer);
	
	return 0;
}

int sum(int *start,int *end)
{
	int total = 0;   //要初始化
	while(start < end)
	{
		total +=*start;
		start++;
	}
	
	return total;
}
 

 

运行结果:

 

total:10.

请按任意键继续. . .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics