编译器错误:从'int'到'int *'[-fpermissive] |的无效转换

时间:2012-02-06 21:52:43

标签: c++ arrays pointers

我遇到了编译错误:

  

main.cpp | 59 |错误:从'int'无效转换为'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;
                }
            }
        }
    }
}

我正在学习......

4 个答案:

答案 0 :(得分:5)

您的错误就在这一行:

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

原因是vectorint*,但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类型并避免完全使用指针?

希望这有帮助!

答案 1 :(得分:2)

vector是一个指针,但是将其下标为vector[nElementos-1],只需将其解引为一个int。看起来你想要的是

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

答案 2 :(得分:0)

数组访问/下标(即a[i],其中a是一个数组/指针而i是一个整数)是一个表达式,其类型是你在阵列。

只需使用address-of运算符&将地址存储在指针中:

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

答案 3 :(得分:0)

你忘记了&vector[nElementos-1]是值,而您需要pFinal的地址。

*pFinal = &(vector[nElementos-1])*pFinal = vector + nElementos-1