Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Como eu posso passar vetores para funções e retornar vetores em uma função ?
Por exemplo, eu pensava q era assim:
#include <cstdlib>
#include <iostream>
using namespace std;
int testa(int vetor[])
{
for(int i=0; i<5; i++)
testa[i] = i+2;
return vetor;
}
int main(int argc, char *argv[])
{
int vetor[5] = {1,2,3,4,5};
testa(&vetor);
for(int i=0; i<5; i++)
cout << vetor[i] << endl;
return 0;
}>
Olá!
Acho que você queria dizer matriz, não std::vector (que foi o que você disse: um vetor). O que você está usando é uma matriz, vetor é outra coisa completamente diferente.
Matrizes não podem ser retornadas por funções, mas você pode retornar um ponteiro que aponta para tal matriz, e indexá-lo para usar como matriz.
Tente algo assim:
PS: Não sei se aprendeu, mas matrizes podem ser usadas como ponteiros (e ponteiros como matrizes, em certas ocasiões), por isso o código abaixo funciona. Afinal, uma matriz é um ponteiro que aponta para determinada localição na memória, que pode ser indexada pelas chaves []. O valor não é a matriz, e sim o que está contido nela, que está armazenado na memória. Uma matriz é um mero ponteiro de um conjunto de variáveis.
#include <cstdlib>
#include <iostream>
using namespace std;
int testa(int vetor)
{
for(int i=0; i<5; i++)
vetor[i] = i+2;
return vetor;
}
int main(int argc, char *argv[])
{
int vetor[5] = {1,2,3,4,5};
testa(vetor);
for(int i=0; i<5; i++)
cout << vetor[i] << endl;
return 0;
}
Abraços :D
Entendi +ou-, tentei fazer o mesmo programa só que com um array bidimensional e está dando erro ao chamar a função na main
#include <cstdlib>
#include <iostream>
using namespace std;
int * testa(int **matriz)
{
for(int i=0; i<3; i++)
matriz[0][i] = i+2;
return *matriz;
}
int main(int argc, char *argv[])
{
int matriz[2][3] = {{1,2,3},{1,1,1}};
testa(matriz));
for(int i=0; i<3; i++)
cout << matriz[0][i] << endl;
system("PAUSE");
return 0;
}Olá!
Você colocou 2 * depois de matriz na função.
O símbolo de declara um ponteiro*, não o número de dimensões de uma matriz. Estude ponteiros e matrizes para entender melhor.
Um ponteiro é a localização de uma variável no registro, por isso um int *teste; é um ponteiro que aponta para um local no registro que dever ser int.
Enfim, coloque um * só.
Abraços :D
>
Olá!
Você colocou 2 * depois de matriz na função.
O símbolo de declara um ponteiro*, não o número de dimensões de uma matriz. Estude ponteiros e matrizes para entender melhor.
Um ponteiro é a localização de uma variável no registro, por isso um int *teste; é um ponteiro que aponta para um local no registro que dever ser int.
Enfim, coloque um * só.
Abraços :D
Se eu tirar um dos * da erro em:
matriz[0][i] = i+2;
Invalid types 'int[int]' for array subscript
testa(matriz));
estranha essa linha neh?
[]s
Olá!
Acho que você queria dizer matriz, não std::vector (que foi o que você disse: um vetor). O que você está usando é uma matriz, vetor é outra coisa completamente diferente.
Matrizes não podem ser retornadas por funções, mas você pode retornar um ponteiro que aponta para tal matriz, e indexá-lo para usar como matriz.
Tente algo assim:
PS: Não sei se aprendeu, mas matrizes podem ser usadas como ponteiros (e ponteiros como matrizes, em certas ocasiões), por isso o código abaixo funciona. Afinal, uma matriz é um ponteiro que aponta para determinada localição na memória, que pode ser indexada pelas chaves []. O valor não é a matriz, e sim o que está contido nela, que está armazenado na memória. Uma matriz é um mero ponteiro de um conjunto de variáveis.
int testa(int vetor)
{
int main(int argc, char *argv[])
{
Abraços :D