编写一个对数组进行操作的函数,目的是返回数组内所用元素的和。
第一种形式:函数原型为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.
请按任意键继续. . .