函数、数组与指针的关系

假设我们要写一个统计数组中所有元素之和的函数,可以如下写法

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容