黑马程序员技术交流社区

标题: 关于形参、实参数据传递 两种方式对比 [打印本页]

作者: tr2e    时间: 2015-8-21 11:21
标题: 关于形参、实参数据传递 两种方式对比
/*给题目为定义外部函数 求数组中的最大值、最小值及其位置
关于数据的传递方式*/
#include <stdio.h>
FindMax(int num[], int n, int *pMaxPos,int *pmax);
int FindMin(int num[], int n, int *pMinPos);
main()
{
       int num[10], maxValue, maxPos, minValue, minPos, i;
       printf("Input 10 numbers:\n");
       for (i=0; i<10; i++)
       {
             scanf("%d", &num[i]);      
       }
       FindMax(num, 10, &maxPos,&maxValue);
       minValue = FindMin(num, 10, &minPos);  
       printf("Max=%d, Position=%d, Min=%d, Position=%d\n",
       maxValue, maxPos, minValue, minPos);
}
FindMax(int num[], int n, int *pMaxPos,int *pmax)
{
      int i;
     *pmax = num[0];   
     *pMaxPos = 0;   
      for (i = 1; i < n; i++)
      {
             if (num[i] > *pmax)
                   {
                            *pmax= num[i];
                             *pMaxPos = i;
                   }
      }
}
int FindMin(int num[], int n, int *pMinPos)
{
       int i, min;
      min = num[0];           
      *pMinPos = 0;           
       for (i = 1;i < 10;i++)
     {
            if (num[i] < min)
           {
                   min = num[i];
                   *pMinPos = i;
           }
}
return min ;
}

作者: tr2e    时间: 2015-8-21 11:23
利用指针及地址取地址 可忽略return 详细见 求最大值
作者: iphone    时间: 2015-8-21 13:14
给楼主一个建议。学C是为了给后面的OC服务的,所以没有必要太纠结,只要了解当前指针代表什么, 函数套函数运行过程,以及程序中循环的判断就可以,没有必要再太细节的问题上纠结,先往后面学,再回过头看前面的问题,你会发现其实很简单。因为一个程序看三遍和看一遍看完的感受是完全不一样的。请采纳 ,谢谢
作者: tr2e    时间: 2015-8-21 13:49
iphone 发表于 2015-8-21 13:14
给楼主一个建议。学C是为了给后面的OC服务的,所以没有必要太纠结,只要了解当前指针代表什么, 函数套函数 ...

这是我发现的比较有意思的地方 发出来给大家分享一下。指针确实有点绕 多谢提醒。
作者: tr2e    时间: 2015-8-21 13:50
iphone 发表于 2015-8-21 13:14
给楼主一个建议。学C是为了给后面的OC服务的,所以没有必要太纠结,只要了解当前指针代表什么, 函数套函数 ...

因为发现main函数可以不用写return
作者: iphone    时间: 2015-8-21 16:29
tr2e 发表于 2015-8-21 13:50
因为发现main函数可以不用写return

前面是Void main 没有返回值   如果写int main 就得返回整型、看前面的返回值类型就可以的
作者: tr2e    时间: 2015-8-25 14:51
iphone 发表于 2015-8-21 16:29
前面是Void main 没有返回值   如果写int main 就得返回整型、看前面的返回值类型就可以的 ...

我写的是 int main 但是没有return 你发现没
作者: tr2e    时间: 2015-8-25 14:52
#include <stdio.h>
FindMax(int num[], int n, int *pMaxPos,int *pmax);
int main()
{
        int num[10], maxValue, maxPos, minValue, minPos, i;
        printf("Input 10 numbers:\n");
        for (i=0; i<10; i++)
        {
              scanf("%d", &num[i]);      
        }
        FindMax(num, 10, &maxPos,&maxValue);
        printf("Max=%d, Position=%d\n",
        maxValue, maxPos);
}
FindMax(int num[], int n, int *pMaxPos,int *pmax)
{
       int i;
      *pmax = num[0];   
      *pMaxPos = 0;   
       for (i = 1; i < n; i++)
       {
              if (num[i] > *pmax)
                    {
                             *pmax= num[i];
                              *pMaxPos = i;
                    }
       }
}

作者: iphone    时间: 2015-8-25 17:27
tr2e 发表于 2015-8-25 14:51
我写的是 int main 但是没有return 你发现没

无所谓的东西
作者: tr2e    时间: 2015-8-25 21:52
iphone 发表于 2015-8-25 17:27
无所谓的东西

可能是然并卵 但是它存在即合理
作者: lzfree    时间: 2015-8-25 23:04
顶一下下
作者: 李天昊    时间: 2015-8-25 23:46
恩  学习了

作者: tr2e    时间: 2015-8-26 11:56
chensc 发表于 2015-8-25 21:53
学习学习!

谢大神顶
作者: tr2e    时间: 2015-8-26 11:58
lzfree 发表于 2015-8-25 23:04
顶一下下

多谢顶贴 {:2_41:}
作者: DUKEMAN    时间: 2015-8-26 11:59
iphone 发表于 2015-8-21 13:14
给楼主一个建议。学C是为了给后面的OC服务的,所以没有必要太纠结,只要了解当前指针代表什么, 函数套函数 ...

真的吗,我就怕,C得学习特别扎实才能,进行下一步,现在一直用心看,C,快扎进牛角尖了
作者: tr2e    时间: 2015-8-26 12:00
李天昊 发表于 2015-8-25 23:46
恩  学习了

共同学习 因为我觉得这不是无所谓的东西
作者: to_love    时间: 2015-8-26 16:50
号复杂。
作者: tr2e    时间: 2015-8-26 19:05
to_love 发表于 2015-8-26 16:50
号复杂。

其实我想说明的就是8楼里节选出来的那段 int main 可以没有return
作者: 企业部-阿狗老师    时间: 2015-8-26 19:45
指针确实有点绕 多谢提醒。
作者: tr2e    时间: 2015-8-27 12:57
昆哥的狗 发表于 2015-8-26 19:45
指针确实有点绕 多谢提醒。

{:3_51:} 这个也不算提醒 就是给大家带来点新的思路
作者: tr2e    时间: 2015-9-23 15:48
更新: 通过指针访问内存 直接修改变量内容。
作者: liang090214    时间: 2015-9-23 22:29
学习了。。。。。。。
作者: 黑白世界    时间: 2015-9-24 00:22
值传递不能改变实参的值,地址传递可以,形参类型是基本数据类型的,都是值传递,而形参是指针或者构造类型的,都是地址传递(因为构造类型的变量名是这个变量的地址),我就记住了这么多,基本上都清楚了。
作者: tr2e    时间: 2015-9-25 09:05
黑白世界 发表于 2015-9-24 00:22
值传递不能改变实参的值,地址传递可以,形参类型是基本数据类型的,都是值传递,而形参是指针或者构造类型 ...

赞一个 你学的很仔细
作者: hejianchun    时间: 2015-9-25 09:07
还有个很重要的 一点,就是 后期UI 先把英语学好吧...
作者: tr2e    时间: 2015-9-25 09:08
hejianchun 发表于 2015-9-25 09:07
还有个很重要的 一点,就是 后期UI 先把英语学好吧...

多谢提醒
作者: socl_ycl    时间: 2015-9-25 10:56

作者: hailiqh    时间: 2015-9-25 16:48
iphone 发表于 2015-8-21 13:14
给楼主一个建议。学C是为了给后面的OC服务的,所以没有必要太纠结,只要了解当前指针代表什么, 函数套函数 ...

说的好!同感!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2