数组作为参数传递给函数后,在函数体内无法正确获取数组长度
发布时间
阅读量:
阅读量
问题描述
在近期进行数组相关编程时,遇到了一个需要解决的问题:希望编写一个函数模板,用于对数组进行排序,而该数组的具体规模尚无法确定。最初尝试的实现方式为:
// 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)
还没有任何评论哟~
