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条)

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?