Você está aqui: C ::: Fundamentos da Linguagem ::: Métodos, Procedimentos e Funções |
Funções em C: Os mistérios da passagem por valor e passagem por referênciaQuantidade de visualizações: 11584 vezes |
Quando se trata de funções, os argumentos para estas podem ser passados por valor e por referência. Muitos iniciantes em programação ficam muito confusos em relação a isso. Em resumo, a passagem por valor é usada quando não queremos que alterações efetuadas nos argumentos fornecidos à função afetem os valores das variáveis originais, ou seja, cópias destes valores são feitas e repassadas à função. Veja um exemplo de PASSAGEM POR VALOR:---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> // uma função que altera o valor da variável // fornecida como argumento void alterar(int valor){ // multiplicamos o valor recebido por 10 valor = valor * 10; printf("%d\n", valor); } int main(int argc, char *argv[]){ // variável do tipo int int a = 2; // vamos imprimir o valor original da variável a printf("%d\n", a); // vamos fornecer este valor para a função alterar() alterar(a); // vamos imprimir o valor original da variável a novamente printf("%d\n", a); puts("\n\n"); system("PAUSE"); return 0; } Ao executar este código nós teremos o seguinte resultado: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- 2 20 2 Isso demonstra que a função realmente recebeu uma cópia do valor da variável a e que, qualquer modificação efetuada na cópia não afetou de forma alguma o valor original. Na PASSAGEM POR REFERÊNCIA nós não passamos uma cópia mas sim uma referência (um ponteiro) para a variável original e qualquer alteração efetuada na função afetará a variável original. Veja um exemplo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> // uma função que altera o valor da variável // fornecida como argumento // note o uso de um ponteiro do tipo int void alterar(int *valor){ // multiplicamos o valor recebido por 10 *valor = (*valor) * 10; printf("%d\n", *valor); } int main(int argc, char *argv[]){ // variável do tipo int int a = 2; // vamos imprimir o valor original da variável a printf("%d\n", a); // vamos fornecer este valor para a função alterar() alterar(&a); // note o uso do operador de endereço & para enviar // não o valor mas o endereço da variável a // vamos imprimir o valor original da variável a novamente printf("%d\n", a); puts("\n\n"); system("PAUSE"); return 0; } Ao executar este código nós teremos o seguinte resultado: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- 2 20 20 Esta execução demonstra que, de fato, a alteração efetuada na função afetou o valor da variável original. Concentre sua atenção no fato de que, quando queremos usar a PASSAGEM POR REFERÊNCIA, precisamos definir os parâmetros da função como sendo ponteiros e, nas chamadas à função, usar o operador de endereço (&) para fornecer o endereço das variáveis que serão modificadas. |
Link para compartilhar na Internet ou com seus amigos: |
C ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes) |
Exercícios Resolvidos de C - Criando dois vetores de inteiros de forma que a soma dos elementos individuais de cada vetor seja igual a 30Quantidade de visualizações: 648 vezes |
Pergunta/Tarefa: Considere os seguintes vetores: // dois vetores de 5 inteiros cada int a[] = {50, -2, 9, 5, 17}; int b[] = new int[5]; Sua saída deverá ser parecida com: Valores no vetor a: 50 -2 9 5 17 Valores no vetor b: -20 32 21 25 13 Veja a resolução comentada deste exercício usando C: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <locale.h> int main(int argc, char *argv[]){ setlocale(LC_ALL,""); // para acentos do português // dois vetores de 5 inteiros cada int a[] = {50, -2, 9, 5, 17}; int b[5]; int i; // vamos preencher o segundo vetor de forma que a soma dos // valores de seus elementos seja 30 for(i = 0; i < 5; i++){ b[i] = 30 - a[i]; } // vamos mostrar o resultado printf("Valores no vetor a: "); for(i = 0; i < 5; i++){ printf("%d ", a[i]); } printf("\nValores no vetor b: "); for(i = 0; i < 5; i++){ printf("%d ", b[i]); } printf("\n\n"); system("PAUSE"); return 0; } |
C ::: Fundamentos da Linguagem ::: Estruturas de Controle |
Como usar o laço while em C - Linguagem C para iniciantes em programaçãoQuantidade de visualizações: 33315 vezes |
O laço while é usado quando queremos que um bloco de instruções seja executado ENQUANTO uma condição for verdadeira (true). Veja um trecho de código exemplificando isso:---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- int valor = 1; while(valor <= 10){ printf("%d ", valor); valor++; } Este trecho de código exibe os números de 1 à 10 na página. Veja agora o mesmo trecho de código, desta vez contando de 10 à 1: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- int valor = 10; while(valor >= 1){ printf("%d ", valor); valor--; } Lembre-se de que a condição testada em um laço while deve resultar em um valor boolean (true ou false). O trecho de código seguinte deixa isso mais claro: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int continuar = 1; // 1 é true em C int valor = 1; while(continuar){ printf("%d ", valor); valor++; if(valor > 10) continuar = 0; // 0 é false em C } printf("\n\n"); system("PAUSE"); return 0; } Para finalizar, lembre-se de que um laço while pode nunca ser executado, ou seja, se a condição testada na primeira iteração já resultar false, o fluxo de código é transferido para a primeira instrução após o laço. |
C ::: Desafios e Lista de Exercícios Resolvidos ::: Operadores de Manipulação de Bits (Bitwise Operators) |
Exercícios Resolvidos de C - Como converter de decimal para binário usando os operadores de bits em CQuantidade de visualizações: 663 vezes |
Pergunta/Tarefa: Escreva um programa C para pede para o usuário informar um número decimal e faça a conversão para binário usando os operadores de bits. Sua saída deverá ser parecida com: Informe um número decimal: 9 O número binário é: 00000000000000000000000000001001 Veja a resolução completa para o exercício em C, comentada linha a linha: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <locale.h> // vamos definir o tamanho do vetor para guardar // os dígitos do número binário #define TAM_INT sizeof(int) * 8 int main(int argc, char *argv[]){ // variáveis para ajudar a resolver o problema int decimal, indice, i; // vetor para guardar o número binário int binario[TAM_INT]; setlocale(LC_ALL,""); // para acentos do português // vamos pedir para o usuário informar um decimal inteiro printf("Informe um número decimal: "); scanf("%d", &decimal); // ajustamos índice para o último elemento do vetor indice = TAM_INT - 1; // enquanto índice for maior ou igual a 0 while(indice >= 0){ // vamos guardar o bit menos significativo LSB binario[indice] = decimal & 1; // diminuímos o índice indice--; // desloca bits para a direita uma posição decimal = decimal >> 1; } // agora vamos exibir o número binário printf("O número binário é: "); for(i = 0; i < TAM_INT; i++){ printf("%d", binario[i]); } printf("\n\n"); system("PAUSE"); return 0; } |
Vamos testar seus conhecimentos em Engenharia Civil - Construção Civil |
Fases de uma obra Em relação à parte gráfica de um projeto, a Planta de Locação/Localização serve, comumente: A) Como ponto de partida para a marcação da construção no terreno. B) Para estabelecer a posição em relação às divisas do terreno e ao alinhamento das vias públicas. C) Como projeção vertical, obtida por planos verticais que interceptam as paredes, portas e janelas, fornecendo maiores informações para a execução da obra. D) Como projeções verticais das fachadas ou faces externas dos edifícios. E) Como projeção horizontal da seção reta, passando acima do peitoril das janelas, para que fiquem representados todos os vãos. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Ética e Legislação Profissional |
Responsabilidade civil dos prepostos e preponentes Com relação as definições do preposto, assinale a alternativa correta. A) O preposto pode negociar por conta própria ou de terceiro, e participar indiretamente de operação idêntica a que lhe foi cometida. B) O preposto não pode, sem autorização escrita, fazer-se substituir no desempenho da preposição, sob pena de responder pessoalmente pelos atos do substituto e pelas obrigações por ele contraídas. C) Considera-se inválida a entrega de papéis, bens ou valores ao preposto, encarregado pelo preponente, se este os recebeu sem protesto. D) As limitações contidas na outorga de poderes podem ser opostas a terceiros, dependem do arquivamento e averbação do instrumento no Registro Público de Empresas Mercantis. E) No exercício de suas funções, os prepostos são pessoalmente responsáveis, perante terceiros, pelos atos culposos e atos dolosos. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Ética e Legislação Profissional |
A responsabilidade moral A moral está intrínseca, ou seja, no interior da decisão de como agir em determinada situação, no foro íntimo de cada um, na forma como as pessoas, individualmente, reagem diante de certo impasse. Portanto, marque a alternativa que expressa corretamente o conceito de moral. A) Moral e ética são a mesma coisa. B) Moral é o conjunto de regras aplicadas no cotidiano e usadas continuamente por cada cidadão. C) Moral remete a atitudes benéficas. D) Moral reflete em atitudes que os cidadãos desprezam. E) Moral é o conjunto de regras que não se aplicam, de nenhuma forma, na sociedade. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Ética e Legislação Profissional |
Ética, Legislação e Entidades que regulamentam a profissão São afirmativas corretas sobre a ética na profissão, exceto: A) A ética é a reflexão sobre a moral. É ético aquele que age de acordo com os padrões de conduta ou prática correta, especialmente os padrões profissionais. B) A engenharia, como profissão, deve contribuir para o bem-estar social, sendo o engenheiro responsável, através de suas ações e projetos, pelas consequências à sociedade que confia em sua competência profissional. C) O comportamento ético para o engenheiro é uma habilidade tão importante como as habilidades técnicas, matemáticas e científicas. D) Como engenheiro, você deve apoiar-se em seus princípios éticos pessoais, diferenciando pequenos desvios de ações de grande impacto à sociedade. Somente grandes ações configuram um problema ético. E) A ética está associada ao estudo fundamentado dos valores morais que orientam o comportamento humano em sociedade. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em |
Dimensionamento de pilares de extremidade As solicitações que ocorrem num pilar de extremidade podem ser as forças normais e os momentos fletores. No método de dimensionamento do pilar-padrão com curvatura aproximada, considera-se um momento mínimo que deverá ser comparado com os demais momentos de 1ª ordem. Diante do exposto, qual é o valor do momento mínimo nas direções x e y do pilar de extremidade apresentado na figura a seguir? A) M1d, mín, x = 4025,65KN.cm; M1d, mín, y = 2499,5KN.cm. B) M1d, mín, x = 1585,25KN.cm; M1d, mín, y = 2389,21KN.cm. C) M1d, mín, x = 2500KN.cm; M1d, mín, y = 3056,5KN.cm. D) M1d, mín, x = 2028,6KN.cm; M1d, mín, y = 3056,5KN.cm. E) M1d, mín, x = 2028,6KN.cm; M1d, mín, y = 2499KN.cm. Verificar Resposta Estudar Cards Todas as Questões |
Mais Desafios de Programação e Exercícios e Algoritmos Resolvidos de C |
Veja mais Dicas e truques de C |
Dicas e truques de outras linguagens |
Códigos Fonte |
Software de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais |
Linguagens Mais Populares |
1º lugar: Java |