c) o que é a estrutura x e qual é sua função?
Soluções para a tarefa
Respondido por
2
Antes de mais nada, vamos deixar bem claro que, à rigor, não existe passagem por referência em linguagem C.
Mas por que vemos tanto falarem sobre isso, se não existe?
Na verdade, o que existe é uma espécie de 'truque', que é passar o endereço de memória, através de ponteiros, para funções, simulando uma passagem por referência.
Então não há problema em falar de passagem por referência em C, apenas use seu bom senso.
Como alterar uma struct em uma função Ok, ler os dados de uma struct através de funções é bem simples e é feito exatamente da mesma maneira que fizemos com outros tipos de dados.
Porém, só ler nem sempre é tão útil assim. E quando quisermos alterar uma struct? Vamos ter que alterar na main() ? Claro que não! Já explicamos que entupir a função main() é um péssimo hábito de programação. Temos que dividir bem as tarefas de um aplicativo em C em diversas funções, cada uma fazendo uma tarefa bem específica.
Se você lembrar bem, para alterar o valor de uma variável, fizemos uso da passagem por referência, onde enviamos o endereço de memória de uma variável, em vez de uma cópia de seu valor (como é feito na passagem por valor).
Para fazer, a função deve ser declarada de modo a esperar receber, como argumento, um endereço de memória. Ou seja, o parâmetro é um ponteiro. A nossa função preenche seria: void Preenche(CARRO *car);
E para passarmos a struct ? Temos que passar o endereço de memória dessa estrutura, e isso é feito colocando o operador & antes do nome da struct: Preenche(&fusca);
Até aí, tudo ok. O problema vem quando vamos tratar a estrutura dentro da função, pois devemos ter um cuidado especial e é aqui onde os iniciantes costumam se confundir e se complicar.
A função vai receber um ponteiro car de uma estrutura. Para alterarmos os membros da estrutura, temos que usar o asterisco antes do ponteiro, lembra? O ponteiro em si é só um endereço de memória, o valor para qual esse ponteiro aponta é obtido quando colocamos um asterisco antes do nome do ponteiro. Por exemplo, para preenchermos o campo modelo: gets( (*car).modelo);
E para acessar o elemento que armazena a potência do motor? (*car).potenciaMotor
E para alterar esse valor, dentro da função scanf(), por exemplo? scanf("%f", &(*car).potenciaMotor);
Mas por que vemos tanto falarem sobre isso, se não existe?
Na verdade, o que existe é uma espécie de 'truque', que é passar o endereço de memória, através de ponteiros, para funções, simulando uma passagem por referência.
Então não há problema em falar de passagem por referência em C, apenas use seu bom senso.
Como alterar uma struct em uma função Ok, ler os dados de uma struct através de funções é bem simples e é feito exatamente da mesma maneira que fizemos com outros tipos de dados.
Porém, só ler nem sempre é tão útil assim. E quando quisermos alterar uma struct? Vamos ter que alterar na main() ? Claro que não! Já explicamos que entupir a função main() é um péssimo hábito de programação. Temos que dividir bem as tarefas de um aplicativo em C em diversas funções, cada uma fazendo uma tarefa bem específica.
Se você lembrar bem, para alterar o valor de uma variável, fizemos uso da passagem por referência, onde enviamos o endereço de memória de uma variável, em vez de uma cópia de seu valor (como é feito na passagem por valor).
Para fazer, a função deve ser declarada de modo a esperar receber, como argumento, um endereço de memória. Ou seja, o parâmetro é um ponteiro. A nossa função preenche seria: void Preenche(CARRO *car);
E para passarmos a struct ? Temos que passar o endereço de memória dessa estrutura, e isso é feito colocando o operador & antes do nome da struct: Preenche(&fusca);
Até aí, tudo ok. O problema vem quando vamos tratar a estrutura dentro da função, pois devemos ter um cuidado especial e é aqui onde os iniciantes costumam se confundir e se complicar.
A função vai receber um ponteiro car de uma estrutura. Para alterarmos os membros da estrutura, temos que usar o asterisco antes do ponteiro, lembra? O ponteiro em si é só um endereço de memória, o valor para qual esse ponteiro aponta é obtido quando colocamos um asterisco antes do nome do ponteiro. Por exemplo, para preenchermos o campo modelo: gets( (*car).modelo);
E para acessar o elemento que armazena a potência do motor? (*car).potenciaMotor
E para alterar esse valor, dentro da função scanf(), por exemplo? scanf("%f", &(*car).potenciaMotor);
Perguntas interessantes
Matemática,
10 meses atrás
Geografia,
10 meses atrás
Química,
10 meses atrás
História,
1 ano atrás
Português,
1 ano atrás
Física,
1 ano atrás
Matemática,
1 ano atrás