鱼C论坛

 找回密码
 立即注册
查看: 2634|回复: 5

请C大牛帮忙解释一下这段代码

[复制链接]
发表于 2013-5-3 15:07:25 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>
int sum(int [], int);  //求和函数
int main(void)
{
          int num[6]={10,20,30,40,50,60};
          int total ;
          total=sum(sum, 6);  //调用求和函数
          printf("此数组的总和为: %d\n", total);
          return 0;
}

int  sum(int p[], int n)   
{
         int i,  t=0;
         for(i=0;i<n;i++)
         {
                 t += p[i];
         }
         return t;
}
我的问题是: 为什么在定义函数时把数组作为形参,而调用此函数时,传入num实参,却是被当做第一个数组元素的地址传入的,既然定义的数组形参,为什么编译器把他当做指针,即编译器为什么把 int p[] 解释成int *p? 求高手解答?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-3 15:17:37 | 显示全部楼层
我认为编译器并没有把他当指针,只是传入了数组的首地址而已
就如后面写的p[i++] 不知道对不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-3 16:11:25 | 显示全部楼层
应该是total=sum(num, 6);吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-3 17:13:22 | 显示全部楼层
希望你能看下,传值调用,传址调用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-3 17:24:34 | 显示全部楼层
值传递 地址传递 第一个字节的地址 就代表数组的地址 :(我是VIP,我骄傲!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-5-3 18:04:09 | 显示全部楼层

我看了传值调用和传址调用,传址调用时为了解决传值调用无法调换两个变量的值,在传值调用中,两个实参a,b传递给型参x,y,实际上是这样的代码: int x=a,  int y=b, 以至于调用完函数后,只是在自定义函数中的两个局部变量xy的值发生了变化,main()函数中国的两个变量的值并未发生变化,所以用传值调用,用指针来解决对调问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-3 07:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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