To estudando C e montei uma função que deveria somar os valores do vetor. Pensei em passar um ponteiro e dentro da função, ir incrementando a posição de memória e pegando o valor de lá, mas não deu certo. Na linha valorTotal = **vetor; da um erro de compilação e não entendo o pq do erro "23 C:\Documents and Settings\Administrador\Desktop\Estudo P2\main.c invalid type argument of `unary *’ "
#include <stdio.h>
#include <stdlib.h>
#define TAMANHO 5
int main(int argc, char *argv[])
{
int i;
int vetor[TAMANHO];
int valorTotal = 0;
for(i=0; i<TAMANHO; i++){
printf("Valor: ");
scanf("%d", &vetor[i]);
}
valorTotal = calcularValores(vetor);
printf("A soma eh %d", valorTotal);
system("PAUSE");
return 0;
}
int calcularValores(int *vetor) {
int i, valorTotal;
for(i = 0; i<TAMANHO; i++){
valorTotal = **vetor;
*(vetor++);
}
}
A primeira coisa é que é sempre aconselhável usar um ponteiro “const” para indicar que você não quer mexer no array, apenas consultá-lo (como é o caso do método calcularValores).
Ainda mais, se você sabe que vai percorrer um array, não declare o parâmetro como um ponteiro, e sim como um array.
Em C não somente é mais seguro como também permite ao compilador efetuar algumas otimizações que ele não pode fazer se tiver apenas “ponteiros puros”.
E de qualquer maneira, o correto teria de ser, já que você quer totalizar os elementos do array:
int calcularValores (int vetor[]) {
int i, valorTotal = 0;
for(i = 0; i<TAMANHO; i++) {
valorTotal = valorTotal + vetor[i];
}
return valorTotal;
}
>
Julio-san, você se esqueceu que C é mais primitivo que o Java e não avisa que você se esqueceu de inicializar uma variável local (já me dei muito mal por causa disso, justamente quando fiquei programando anos seguidos com o Java e tive de fazer algumas coisas em C).
No seu caso, você esqueceu que valorTotal deve ser inicializado com zero.
é verdade. sem inicializar ela contem somente lixo de memória(de um tipo inteiro).
como é uma variavel de um tipo primitivo, pode não causar muito estrago, quanto um ponteiro(que poderia estar apontando uma área de memória que talvez o próprio win esteja utilizando), que lhe permite sobreescrever áreas de memória.