函数、数组与指针的关系
2017-11-12 本文已影响0人
奋斗live
假设我们要写一个统计数组中所有元素之和的函数,可以如下写法
total = sum(arr);
以上代码告诉了我们的是,参数arr实际是一个数组的首元素的地址,那么它的对于的数组原型可以如下
int sum(int * arr);
也可以
int sum(int arr[]);
总之函数原型如下,都是等价的
int sum(int * arr);
int sum(*);
int sum(int arr[]);
int sum([]);
但函数定义中不能省略参数名,如下
int sum(int * arr){
//省略函数代码
}
int sum(int arr[]){
//省略函数代码
}
再看一个例子
#include<stdio.h>
#define SIZE 4
int sum(int arr[],int n);
int main(){
int days[SIZE] = {10,20,30,40};
long total;
total = sum(days,SIZE);
printf("这个数组总和是%d\n",total);
printf("这个数组大小是%u\n",sizeof days);//数组每个元素都是int类型,4个int类型,就是16个字节
return 0;
}
int sum(int arr[],int n){
int i;
int total = 0;
for(i=0;i<n;i++){
total+= arr[i];
}
printf("这个arr 是%u字节\n",sizeof arr);//传递的是数组的首地址,int 类型占用的是4字节
return total;
}
输出如下
image.png