我遇到了编译错误:
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;
}
}
}
}
}
我正在学习......
答案 0 :(得分:5)
您的错误就在这一行:
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
类型并避免完全使用指针?
希望这有帮助!
答案 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
。