Marcia Rosa Postado Junho 14, 2010 Denunciar Share Postado Junho 14, 2010 Olá,Estou iniciando no desenvolvimento C. Estou com o seguinte problema:-Tenho dois arquivos: arq1.c e arq2.c. -Fiz um include do arq2.c dentro do arq1.c onde chamo uma função do arq2.c.-Dentro do arq2.c tenho uma variável char nome que recebe um valor tratada dentro da função invocada.-Como faço para receber essa variável dentro do arq1.c que chamou a função?Obrigada.Márcia. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Mnemonic Postado Junho 14, 2010 Denunciar Share Postado Junho 14, 2010 É só usar uma função que retorna o valor dela. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcia Rosa Postado Junho 14, 2010 Autor Denunciar Share Postado Junho 14, 2010 É só usar uma função que retorna o valor dela.Não posso. É uma função void que já existe e não posso mexer nela. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jonathan Queiroz Postado Junho 14, 2010 Denunciar Share Postado Junho 14, 2010 Nesse caso passe um ponteiro para a variável como parâmetro, assim você vai receber o endereço do char na memória e poderá alterar seu valor. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcia Rosa Postado Junho 14, 2010 Autor Denunciar Share Postado Junho 14, 2010 Nesse caso passe um ponteiro para a variável como parâmetro, assim você vai receber o endereço do char na memória e poderá alterar seu valor.Poderia dar um exemplo Jonathan, pois como disse estou iniciando e algumas coisas ainda estou aprendendo.Obrigada. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Mnemonic Postado Junho 15, 2010 Denunciar Share Postado Junho 15, 2010 void teste(int *x) { *x = 12;}// ...int x = 0; // x é igual a 0teste( &x ); // agora x é igual a 12 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcia Rosa Postado Junho 15, 2010 Autor Denunciar Share Postado Junho 15, 2010 void teste(int *x) { *x = 12;}// ...int x = 0; // x é igual a 0teste( &x ); // agora x é igual a 12Mnemonic,Até tentei fazer isso só que dá erro que a variável x não foi declarada.Declarei ela no arq2.c; fiz include do arq2.c no arq1.c e após invocar o método que preenche o valor de X no arq2.c dei um print para exibir o valor de X.Continuo na mesma.Obrigada pela tentativa. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 webpantoja Postado Junho 15, 2010 Denunciar Share Postado Junho 15, 2010 (editado) Márcia,Acho que sua dificuldade está em diferenciar como passar valor de variável e passar variável por referência.Arquivo1 main() { int x =0; Metodo1( x ); // Aqui você está passando o valor de X, que é 0. Qualquer operação neste método não altera x do arquivo1. printf("X = %d", x ); // Aqui vai printar 'X = 0' Metodo2( &x ); // Aqui você está passando uma referencia ao endereço de memória da variável X. Operação no método altera x aqui. printf("X = %d", x ); // Aqui vai printar 'X = 12' } Arquivo2 Metodo1( int x ) { x = 12; // x no caso é simplesmente uma variável local } Metodo2( int *x ) { *x = 12; // aqui altera o valor da variável local x do Arquivo1 }Espero ter ajudado, WebPantoja Editado Junho 15, 2010 por webpantoja Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcia Rosa Postado Junho 16, 2010 Autor Denunciar Share Postado Junho 16, 2010 Márcia,Acho que sua dificuldade está em diferenciar como passar valor de variável e passar variável por referência.Arquivo1 main() { int x =0; Metodo1( x ); // Aqui você está passando o valor de X, que é 0. Qualquer operação neste método não altera x do arquivo1. printf("X = %d", x ); // Aqui vai printar 'X = 0' Metodo2( &x ); // Aqui você está passando uma referencia ao endereço de memória da variável X. Operação no método altera x aqui. printf("X = %d", x ); // Aqui vai printar 'X = 12' } Arquivo2 Metodo1( int x ) { x = 12; // x no caso é simplesmente uma variável local } Metodo2( int *x ) { *x = 12; // aqui altera o valor da variável local x do Arquivo1 }Espero ter ajudado, WebPantojawebpantoja,Com certeza melhorou meu entendimento desse tal de *ponteiro. Vou testar essa sua dica e ver se vai dar certo. Pela lógica, creio que dará certo.Antes preciso ver o por quê e fazer o meu compilador voltar a funcionar. Estava tudo bem até ontem a tarde. Assim que o refizer voltar a ativa, dou resposta no tópico.Muito obrigada.Márcia. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcia Rosa Postado Junho 16, 2010 Autor Denunciar Share Postado Junho 16, 2010 Márcia,Acho que sua dificuldade está em diferenciar como passar valor de variável e passar variável por referência.Arquivo1 main() { int x =0; Metodo1( x ); // Aqui você está passando o valor de X, que é 0. Qualquer operação neste método não altera x do arquivo1. printf("X = %d", x ); // Aqui vai printar 'X = 0' Metodo2( &x ); // Aqui você está passando uma referencia ao endereço de memória da variável X. Operação no método altera x aqui. printf("X = %d", x ); // Aqui vai printar 'X = 12' } Arquivo2 Metodo1( int x ) { x = 12; // x no caso é simplesmente uma variável local } Metodo2( int *x ) { *x = 12; // aqui altera o valor da variável local x do Arquivo1 } Espero ter ajudado, WebPantoja webpantoja, Acho que funcionou. Não pude ter certeza porque eu tenho que retornar um char de 16. Poderia me dizer como ficaria usando char? Fiz aqui e não deu certo: Arquivo1 main() { char variavel[16]; Metodo2( &variavel ); printf("X = %s", variavel ); } Arquivo2 Metodo2( char *variavel ) { *variavel = "return ok"; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 webpantoja Postado Junho 16, 2010 Denunciar Share Postado Junho 16, 2010 (editado) Nos exemplos que passei são int, com char você não pode simplesmente passar o ponteiro, basta criar ele antes e passar, olha só:Arquivo1 main() { char variavel[16]; char *pont = variavel; // Cria ponteiro para variável Metodo2( &pont ); printf("X = %s", variavel ); } Arquivo2 void Metodo2( char **variavel ) //Aqui você recebe um ponteiro de um ponteiro lol { strcpy( *variavel, "return ok"); }Agora vai dar certo. Editado Junho 16, 2010 por webpantoja Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcia Rosa Postado Junho 16, 2010 Autor Denunciar Share Postado Junho 16, 2010 Nos exemplos que passei são int, com char você não pode simplesmente passar o ponteiro, basta criar ele antes e passar, olha só:Arquivo1 main() { char variavel[16]; char *pont = variavel; // Cria ponteiro para variável Metodo2( &variavel ); printf("X = %s", variavel ); } Arquivo2 void Metodo2( char **variavel ) //Aqui você recebe um ponteiro de um ponteiro lol { strcpy( *variavel, "return ok"); }Agora vai dar certo.Perfeito. Funcionou exatamente como precisava. Só confirmar se o que alterei está certo....Em "Metodo2( &variavel );" no arquivo1 eu mudei para "Metodo2( &pont );". Assim funcionou. Tá certo?Aproveitar e perguntar mais uma coisa....sempre que passar char no parâmetro deve ser com dois asteríscos "void Metodo2( char **variavel )"?Muito obrigada. Você não sabe o quanto me ajudou pois em nenhuma apostila e material que encontrei na internet há referências de fazer algo desse modo que você me ensinou.Márcia. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 webpantoja Postado Junho 16, 2010 Denunciar Share Postado Junho 16, 2010 (editado) Márcia, Tá certo sim... no exemplo eu criei o ponteiro mas eu passei a variável.. já corrigi aí.. rsrsQualquer variável que você passe a referência, ou seja, utilizando o '&', tem que receber do outro lado como um ponteiro, ou seja, com o '*'. Quando você passa a variável usando 'pont' ele já é normalmente um ponteiro. Do outro lado normalmente já deveria ter 1 *. Agora se você passa a referência dele, usando o '&pont', tem que adicionar um outro '*' do outro lado, ficando assim '**'.Que bom que te ajudei, normalmente você acha essas coisas em livros mais antigos, no qual tem somente o C padrão ANSI. As vezes você vê apostilas aí na internet mas eles misturam muito C com C++, o que pode acabar complicando. C++ tem umas facilidades a mais que o C, então quem começa no C++ e vai para o C sente dificuldade, ao contrário a transição é mais fácil.Att,WebPantoja Editado Junho 16, 2010 por webpantoja Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Marcia Rosa
Olá,
Estou iniciando no desenvolvimento C. Estou com o seguinte problema:
-Tenho dois arquivos: arq1.c e arq2.c.
-Fiz um include do arq2.c dentro do arq1.c onde chamo uma função do arq2.c.
-Dentro do arq2.c tenho uma variável char nome que recebe um valor tratada dentro da função invocada.
-Como faço para receber essa variável dentro do arq1.c que chamou a função?
Obrigada.
Márcia.
Link para o comentário
Compartilhar em outros sites
12 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.