我是否正确使用了指针和数组

Am I using pointers and array correctly?

本文关键字:指针 数组 是否      更新时间:2023-10-16

我的老师针对一个作业问题要求我们将一个数组传递给一个函数,该函数只找到它的中值。如果有偶数,它会对中间的两个值取平均值。我引用他的话"尽可能使用指针"。我唯一能看到的使用指针的是数组本身吗?

我理解需要发生什么的概念,我只是不确定如何正确使用指针,谷歌搜索也不会显示太有用的结果。

int medianArray(int *pArray, int sizeArray)
{
    if(sizeArray % 2 == 1)
    {
        return (pArray[((int)(sizeArray/2)) -1 ] + pArray[((int)(sizeArray/2)) +1 ]) / 2;
    }
    else
        return pArray[(int) sizeArray/2];
}

您的想法是正确的,但您计算的偏移量是错误的。

这里有一个想法:

size_t median = sizeArray / 2;
return (pArray[median] + pArray[median+1]) / 2;

不要忘记,如果值超过int的界限,这将失败,此外,您应该使用size_t来表示大小,因为它永远不应该是负数。

此外,将int计算的结果强制转换为int.是没有意义的

关于C++课程,我认为任何违背标准库中规定的原则的东西都有充分的理由这样做。虽然总是鼓励对指针与迭代器与引用的好处进行学术探索,但"尽可能"提倡指针是一个糟糕的计划,而且源于C思维。

在现代C++课程中,这项任务将围绕着通过定义模板函数来计算任意类型的未排序标准库容器的中值展开。

这样你就可以对人们说"现代c++不使用指针"等时所说的内容有一个具体的感觉。

一种替代方案是使用std::vector

int medianArray(const std::vector<int> &vec)
{
    int sizeArray = vec.size();
    if(sizeArray % 2 == 1)
    {
        return (vec[((int)(sizeArray/2)) -1 ] + vec[((int)(sizeArray/2)) +1 ]) / 2;
    }
    else
        return vec[(int) sizeArray/2];
}

请注意,vector知道它有多大。如果使用vec.at(index) ,它也不会从两端溢出