viciado 1 Denunciar post Postado Abril 5, 2011 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
Renato Utsch 24 Denunciar post Postado Abril 5, 2011 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
viciado 1 Denunciar post Postado Abril 6, 2011 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
Renato Utsch 24 Denunciar post Postado Abril 6, 2011 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
viciado 1 Denunciar post Postado Abril 6, 2011 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
quitZAUMMM 18 Denunciar post Postado Abril 15, 2011 testa(matriz)); estranha essa linha neh? []s Compartilhar este post Link para o post Compartilhar em outros sites