DQH 发表于 2020-3-15 10:19:02

数组和指针到底啥区别

#include<stdio.h>
#define SIZE 10
int sum(int ar[], int n);
int main(void)
{
        int marbles = {20,10,5 ,39, 4, 16, 19 ,26, 31, 20};
        long answer;
        answer = sum(marbles, SIZE);
        printf("The total of marbles is %ld\n",answer);
        printf("The size of marbles is %d bytes.\n",
                sizeof marbles);
        printf("%d\n",marbles);

        return 0;
}

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

        return total;

}
//这里我把数组名传给定义的函数,数组名不是首地址吗,传一个地址不是应该有一个指针变量来接收吗,为什么定义的函数是一个数组,运行结果还是没问题

sunrise085 发表于 2020-3-15 12:43:11

数组和指针是两种不同的类型,数组具有确定数量的元素,而指针只是一个标量值。数组可以在某些情况下转换为指针,当数组名在表达式中使用时,编译器会把数组名转换为一个指针常量,是数组中的第一个元素的地址,类型就是数组元素的地址类型。
当数组作为函数参数传入时,数组退化为指针,类型是第一个元素的地址类型。“数组名被改写成一个指针参数”,这个规则并不是递归定义的。正如你这段程序中的输出结果那样,在sum()函数中输出的sizeof ar是int指针的大小,即int类型的空间大小。而在min()函数中sizeof marbles是数组marbles的大小,即10个int类型的空间大小。
int FindMax(int* array);
int FindMax(int array[]);
int FindMax(int array);
这三种写法是一样的。
页: [1]
查看完整版本: 数组和指针到底啥区别