Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

viciado

Vetores

Recommended Posts

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;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

testa(matriz));

 

estranha essa linha neh?

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.