c++ - 编译器错误 : invalid conversion from 'int' to 'int*' [-fpermissive]|

标签 c++ arrays pointers

我遇到编译器错误:

main.cpp|59|error: invalid conversion from 'int' to 'int*' [-fpermissive]|

违规行是

int *pComienzo = vector, *pFinal = vector[nElementos-1];

为什么会出错?有人可以帮助我吗?

下面是我的代码:

#include <iostream>
#include <ctype.h>

using namespace std;
const unsigned short int MAX_VAL = 10;

int LongitudCadena(char*);

int BuscarCaracter(char *cadena, char caracter);

void Ordenar(int *vector, int nElementos, bool ascendente);

int main()
{
    char *cadena = "asdasd";

    cout << LongitudCadena(cadena) << endl;

    cout << BuscarCaracter(cadena, 'a') << endl;

    int iArray[] = {5,4,3,2,1};

    Ordenar(iArray, 5, 1);

    cout << iArray << endl;

    return 0;
}

int LongitudCadena(char *cadena)
{
    char *c = cadena;
    for(int i = 0; i < MAX_VAL; i++)
    {
        if (c[i] == 0) break;
        cadena++;
    }

    return  cadena - c;
}

int BuscarCaracter(char * cadena, char caracter)
{
    char *pCadena = cadena;
    for (int i = 0; i < MAX_VAL; i++)
    {
        pCadena++;
        if (toupper(cadena[i]) == toupper(caracter))
        return pCadena- cadena;
    }

    return -1;
}

void Ordenar(int *vector, int nElementos, bool ascendente)
{


    int *pComienzo = vector, *pFinal = vector[nElementos-1];

    if (ascendente)
    {
        for (int i = 0; i < nElementos; i++)
        {
            for (; pComienzo < pFinal; pComienzo++, pFinal--)
            {
                if (*pComienzo > *pFinal)
                {
                    *pComienzo += *pFinal;
                    *pFinal -= *pComienzo;
                    *pComienzo -= *pFinal;
                }
            }
        }
    }
}

我在学习...

最佳答案

你的错误在这一行:

int *pComienzo = vector, *pFinal = vector[nElementos-1];

原因是 vector 是一个 int*,但是 vector[nElementos - 1] 是一个普通的 int 。因此声明

int *pFinal = vector[nElementos - 1];

试图将 vector 的最后一个索引处的整数值分配给指针 pFinal,因此出现编译器错误。

要解决此问题,您可能需要执行以下任一操作

int *pFinal = &vector[nElementos - 1];

这使得 pFinal 指向 vector 的最后一个元素,或者

int *pFinal = vector + (nElementos - 1);

它使用指针算法完成同样的事情。

也就是说,既然您使用的是 C++,为什么不使用提供的 std::vector 类型并完全避免使用指针呢?

希望这对您有所帮助!

关于c++ - 编译器错误 : invalid conversion from 'int' to 'int*' [-fpermissive]|,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9167834/

相关文章:

c++ - Microsoft Windows 上的 C 或 C++ BigInt 库

c++ - 检查可变参数模板参数的唯一性

php - Cakephp 3+ 将数组保存在mysql的一个字段中

c - 如何在 C 中将 char 数组转换为 char 指针

c - 在古怪的数据结构中释放后将指针设置为 NULL (C)

c++ - 通过引用辅助函数传递随机数生成器 mt19937 是否正确?

c++ - 可以给 `std`命名空间添加推导指南吗?

python - 从 Pandas Dataframe 创建 Numpy 数组时丢失字符串

python - python中数组之间的相关性

c++ - 如何通过指针访问 vector ?