whyyouhitme_ 2018-03-22 11:55 采纳率: 57.1%
浏览 938
已采纳

两个数组作为实际参数传给被调用函数的时候,没有敲长度,但可以正常运行

根据K。N。KING的现代方法中说的,调用函数的时候实际参数的写法应该是sum_array(b//数组名,LEN//长度)

但是我修改了书中的例题,题目要求把外部变量放进main函数中,以便后面两个函数作为实参。如下
int main(void)
{
int num_in_rank[NUM_RANKS],num_in_suit[NUM_SUITS];
for(;;){
read_cards(num_in_rank//数组名1,num_in_suit//数组名2);
analyze_hand(num_in_rank//数组名1,num_in_suit//数组名2);
printf_result();
}
}
这种两个数组作为实际参数传递给被调用函数的书写格式。合法吗?书上的要求不一样。但是我运行了,程序是没问题的

  • 写回答

4条回答

  • -iostream- 2018-03-23 07:08
    关注

    在解释你的问题之前先给你普及一点c++的常识。
    函数的参数和返回值是不能为数组的,如果需要把数组提供给一个函数使用,通常的做法是提供该数组的首指针。举个例子:
    void arr_manager(int ,int);
    int main()
    {
    int arr[10]; //声明一个长度为10的int数组
    int n=10;
    arr_manager(arr,n);
    ...
    return 0;
    }
    void arr_manager(int
    arr,int n)
    {
    arr[5]=3;//允许使用数组表示法,等价于*(arr+5)=3
    for(int i=0;i<n;i++)
    {
    (arr+i)=0;
    }
    }
    你仔细看一下上面这个程序。
    首先我们知道,数组名代表这个数组的首地址,我们通过把数组的首地址提供给arr_manager()函数实现了对它的操作,同时定义了变量n来跟踪数组的元素个数。
    然而,c++允许程序员在写函数参数列表时将上述的int
    arr写成int arr[]。这种写法的好处在于让调用该函数的程序员知道要提供的是一个数组的地址,但在实质上和int* arr是完全一样的。这个参数只提供首地址,这也是我们为什么要用另一个参数n来告知arr_manager()函数数组元素个数的原因,以免发生访问越界。
    所以,在提供参数时是不用在方括号提供元素个数的,而且最好不要。
    码字不易,如有帮助请采纳。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制