Advertisement

数组作为参数传递给函数后,在函数体内无法正确获取数组长度

阅读量:

问题描述

在近期进行数组相关编程时,遇到了一个需要解决的问题:希望编写一个函数模板,用于对数组进行排序,而该数组的具体规模尚无法确定。最初尝试的实现方式为:

复制代码
    // A code block
    void sort(T arr[])
    {
    	int len;
    	len = sizeof(arr) / sizeof(arr[0]);
    	...}
    
    
      
      
      
      
      
      
    

执行程序后观察到,仅数组中的首个元素被输出。通过调用cout输出长度后发现,其数值为4,表明该数据的长度为4。

问题根源分析

通过查阅相关博客及网络资源,发现其核心原因如下:

  • sizeof 运算符在编译阶段即完成计算,因此无法在运行时动态获取变量的实际值。
  • 当数组作为参数传递至函数时,实际是以指针形式(即首地址)进行传递,系统无法判断该数组的结束位置,因此无法确定其长度,进而导致 sizeof(arr) / sizeof(arr[0]) 的运算结果恒为1。

解决方案

网络资料中提到,可以通过动态内存分配的方式,借助malloc或new实现对内存的管理,从而在函数内部获取传入数组的长度。然而,由于我对动态分配的相关知识

全部评论 (0)

还没有任何评论哟~