鱼C论坛

 找回密码
 立即注册
查看: 2042|回复: 1

[已解决]数组和指针到底啥区别

[复制链接]
发表于 2020-3-15 10:19:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#define SIZE 10
int sum(int ar[], int n);
int main(void)
{
        int marbles[SIZE] = {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[0]);

        return 0;
}

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

        return total;

}
//这里我把数组名传给定义的函数,数组名不是首地址吗,传一个地址不是应该有一个指针变量来接收吗,为什么定义的函数是一个数组,运行结果还是没问题
最佳答案
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[10]);
这三种写法是一样的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[10]);
这三种写法是一样的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-3-14 21:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表