hrcerq
(usa Outra)
Enviado em 24/03/2018 - 15:52h
Jovioluiz escreveu:
O meu problema é que não estou conseguindo atribuir os valores dos vetores v1 e v2 para o vetor v3 com essa atribuição: (v3+i) = *(v1+i);
Isso acontece porque você tratou v3 como se fosse um valor e não um ponteiro. A resposta está no seu próprio código, veja que a expressão "*(v1+i)" está correta.
Explico: vamos supor que o vetor v1 tem 3 posições, e vamos supor também que a primeira posição dele está no endereço de memória 0x103 (apenas um exemplo). Isso significa que a segunda posição (isto é, do segundo elemento) está em 0x103 + tamanho de um int. Se o tamanho de um int para o seu compilador for 4 bytes, por exemplo, então a segunda posição estará em 0x107, e a terceira em 0x10b.
Quando você digita a expressão "v1" está se referindo a "&v1[0]", isto é, o endereço de memória da primeira posição de v1 (0x103). Porém os ponteiros em C são inteligentes, se você soma 1 a um ponteiro, ele entende que deve somar na verdade a quantidade de bytes do tipo em questão. Nesse caso o tipo é int, então ele somará mais 4 posições ao ponteiro para chegar ao segundo elemento. Portanto (&v1[0] + 1) = (v1 + 1) = 0x103 + 4 = 0x107. Se isso parece complexo, tente exercitar isso um pouco, coloque numa folha de papel (ou num editor de texto) etapa por etapa.
Dessa forma, quando você diz "*(v1 + i)", está dizendo que se refere ao valor contido no endereço v1 + i. Sem o sinal de derreferenciamento (*) estaria se referindo ao endereço. "*" significa que você quer o valor contido no endereço e não o endereço em si.
Entendido isso, veja que você não aplicou esse mesmo sinal para v3:
(v3+i) = *(v1+i);
E vou aproveitar pra sinalizar outro problema no seu código: na função uniao, você fez 3 loops for, considerando i = 3 no primeiro e i = 6 no segundo, e no terceiro i = 3 e j = 6. Isso significa que a função só vai funcionar se o primeiro vetor tiver 3 posições e o segundo tiver 6 posições. Experimente mudar o tamanho desses vetores na função main, e veja o que acontece.
Portanto, deve substituir esses valores por variáveis (que você já tem no programa). O valor 3 deve ser substituído pelo tamanho do primeiro vetor, e o valor 6 deve ser substituído pelo tamanho da união subtraindo o tamanho do primeiro vetor. Corrigindo isso, experimente alterar o tamanho dos vetores novamente e veja o resultado.
---
Atenciosamente,
Hugo Cerqueira