paulo1205
(usa Ubuntu)
Enviado em 14/06/2013 - 21:31h
LinuxMH escreveu:
Valeu resolvi o problema, é que antes eu estava usando
int vetor[2][2];
for(int i=0; i<2; i++)
{
for(int j=0; j<2; j++)
{
scanf("%d", vetor[j]);
}
}
sem o & porque pensei que ja ia passar o endereço, porque matriz unimidensional não precisa,
Obrigadão (;
Não sei de onde você tirou isso. Você sempre deve passar endereços a [i]scanf().
Talvez você tenha se confundido com arrays usadas para armazenar strings. De fato, você pode -- e deve! -- dizer algo como isto
char nome[50];
conv_ok=(scanf("%49[^\n]", nome)==1);
nome[49]=0;
(sem o "&") porque o nome de um array sem estar acompanhado de índice de elemento é exatamente o endereço do primeiro elemento (ou seja: no caso acima, é garantido que
nome==&nome[0]).
Mas você não pode extrapolar isso para qualquer situação. Em particular, se você tiver um array de inteiros, não existe conversão em
scanf() para ler vários inteiros passando apenas o endereço do primeiro elemento.
No máximo, o que você poderia fazer -- MAS É FEIO E CONFUNDE MAIS DO QUE AJUDA -- seria se valer do fato de que é sempre verdade que
array=&array[0], para um array de qualquer tipo, e trocar a referência ao primeiro elemento simplesmente pelo nome do array.
No entanto, existe uma prática -- que eu não sei se está escrita em algum lugar, mas certamente está inscrita nos hábtos de bons programadores -- de deixar claro que quando se quer uma referência de acesso apenas a um elemento
n do array, usa-se a sintaxe "
&array[n]", mesmo quando
n vale zero, e mesmo que seja um array de caracteres. Já o uso do nome sem indicação de índices é preferida quando se quer deixar clara a ideia de que vários elementos do array pode ser modificados ao mesmo tempo (geralmente quando se passa o array como argumento de uma função).