|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
}
//这里我把数组名传给定义的函数,数组名不是首地址吗,传一个地址不是应该有一个指针变量来接收吗,为什么定义的函数是一个数组,运行结果还是没问题
数组和指针是两种不同的类型,数组具有确定数量的元素,而指针只是一个标量值。数组可以在某些情况下转换为指针,当数组名在表达式中使用时,编译器会把数组名转换为一个指针常量,是数组中的第一个元素的地址,类型就是数组元素的地址类型。
当数组作为函数参数传入时,数组退化为指针,类型是第一个元素的地址类型。“数组名被改写成一个指针参数”,这个规则并不是递归定义的。正如你这段程序中的输出结果那样,在sum()函数中输出的sizeof ar是int指针的大小,即int类型的空间大小。而在min()函数中sizeof marbles是数组marbles的大小,即10个int类型的空间大小。
int FindMax(int* array);
int FindMax(int array[]);
int FindMax(int array[10]);
这三种写法是一样的。
|
|