<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arquivo para Programação em Linguagem C - Bóson Treinamentos em Ciência e Tecnologia</title>
	<atom:link href="https://www.bosontreinamentos.com.br/category/programacao-em-linguagem-c/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bosontreinamentos.com.br/category/programacao-em-linguagem-c/</link>
	<description>Artigos e Tutoriais sobre Desenvolvimento de Software, Bancos de Dados SQL, Linux, Lógica de Programação, Inteligência Artificial, Hardware, Eletrônica, Arduino, Técnicas e Teorias de Estudo e Aprendizagem, Carreira em TI, Ciências Cognitivas, e muito mais!</description>
	<lastBuildDate>Tue, 11 Apr 2023 13:25:15 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.5</generator>
	<item>
		<title>Como implementar uma pilha em linguagem C usando array</title>
		<link>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/como-implementar-uma-pilha-em-linguagem-c-usando-array/</link>
					<comments>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/como-implementar-uma-pilha-em-linguagem-c-usando-array/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Tue, 11 Apr 2023 13:25:15 +0000</pubDate>
				<category><![CDATA[Programação em Linguagem C]]></category>
		<category><![CDATA[Estruturas de Dados]]></category>
		<category><![CDATA[Linguagem C]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=12836</guid>

					<description><![CDATA[<p>Como implementar uma pilha em linguagem C usando array Pilha é uma estrutura de dados do tipo LIFO (Last In, First Out), muito importante e empregada na criação de algoritmos diversos, que funciona como uma coleção de elementos, permitindo acesso a somente um item de dados armazenado por vez &#8211; o último item inserido na estrutura (chamado de item do topo). Esse item pode ser lido (acessado) ou removido da pilha. É possível implementar pilhas de algumas formas, como por meio de arrays ou com o uso de ADTs (Abstract Data Types / Tipos de Dados Abstratos). Neste tutorial mostro como implementar uma pilha em C usando especificamente um array. Para a implementação desta aplicação, faremos uso de várias estruturas importantes da linguagem C, incluindo cabeçalhos especiais, structs, ponteiros e, claro, arrays. Uma pilha de livros. O último livro a ser colocado na pilha fica no topo, e é o primeiro a ser removido. Vamos ao código da implementação. Código: Pilha em C com Array A seguir temos um exemplo de código que implementa uma pilha em linguagem C usando um array: #include &#60;stdio.h&#62; #include &#60;stdlib.h&#62; // Definir o tamanho máximo da pilha #define TAM_MAX 100 // Definir a estrutura da pilha [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/como-implementar-uma-pilha-em-linguagem-c-usando-array/">Como implementar uma pilha em linguagem C usando array</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Como implementar uma pilha em linguagem C usando array</h2>
<p><a href="http://www.bosontreinamentos.com.br/estruturas-de-dados/estruturas-de-dados-pilhas/">Pilha</a> é uma <a href="http://www.bosontreinamentos.com.br/estruturas-de-dados/estruturas-de-dados/">estrutura de dados</a> do tipo LIFO (Last In, First Out), muito importante e empregada na criação de algoritmos diversos, que funciona como uma coleção de elementos, permitindo acesso a somente um item de dados armazenado por vez &#8211; o último item inserido na estrutura (chamado de item do <strong><em>topo</em></strong>).</p>
<p>Esse item pode ser lido (acessado) ou removido da pilha.</p>
<p>É possível implementar pilhas de algumas formas, como por meio de arrays ou com o uso de ADTs (<em>Abstract Data Types</em> / Tipos de Dados Abstratos). Neste tutorial mostro como implementar uma pilha em C usando especificamente um array.</p>
<p>Para a implementação desta aplicação, faremos uso de várias estruturas importantes da linguagem C, incluindo cabeçalhos especiais, <a href="http://www.bosontreinamentos.com.br/programacao-em-linguagem-c/estruturas-em-linguagem-c/">structs,</a> <a href="http://www.bosontreinamentos.com.br/programacao-em-linguagem-c/ponteiros-em-c-uma-introducao/">ponteiros</a> e, claro, <a href="http://www.bosontreinamentos.com.br/programacao-em-linguagem-c/arrays-em-c-declaracao-inicializacao-e-atribuicao-de-valores/">arrays</a>.</p>
<div id="attachment_19212" style="width: 509px" class="wp-caption aligncenter"><img decoding="async" aria-describedby="caption-attachment-19212" class="wp-image-19212" title="Uma pilha de livros." src="http://www.bosontreinamentos.com.br/wp-content/uploads/2023/04/pilha-livros-linguagem-C.jpg" alt="Uma pilha de livros." width="499" height="368" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2023/04/pilha-livros-linguagem-C.jpg 996w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/04/pilha-livros-linguagem-C-420x310.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/04/pilha-livros-linguagem-C-768x566.jpg 768w" sizes="(max-width: 499px) 100vw, 499px" /><p id="caption-attachment-19212" class="wp-caption-text">Uma pilha de livros. O último livro a ser colocado na pilha fica no topo, e é o primeiro a ser removido.</p></div>
<p>Vamos ao código da implementação.</p>
<h3>Código: Pilha em C com Array</h3>
<p>A seguir temos um exemplo de código que implementa uma pilha em linguagem C usando um array:</p>
<pre><strong>#include &lt;stdio.h&gt;</strong>
<strong>#include &lt;stdlib.h&gt;

</strong><span style="color: #339966;"><strong>// Definir o tamanho máximo da pilha</strong></span>
<strong>#define TAM_MAX 100

</strong><span style="color: #339966;"><strong>// Definir a estrutura da pilha</strong></span>
<strong>struct pilha {</strong>
<strong>    int topo; <span style="color: #339966;">// índice do topo da pilha</span></strong>
<strong>    int items[TAM_MAX]; <span style="color: #339966;">// array para armazenar os itens da pilha</span></strong>
<strong>};

</strong><span style="color: #339966;"><strong>// Função que cria uma pilha vazia</strong></span>
<strong>struct pilha* criar_pilha() {</strong>
<strong>    struct pilha* nova_pilha = (struct pilha*) malloc(sizeof(struct pilha));</strong>
<strong>    nova_pilha-&gt;topo = -1;</strong>
<strong>    return nova_pilha;</strong>
<strong>}

</strong><span style="color: #339966;"><strong>// Função para verificar se a pilha está vazia</strong></span>
<strong>int is_empty(struct pilha* pilha) {</strong>
<strong>    return pilha-&gt;topo == -1;</strong>
<strong>}

</strong><span style="color: #339966;"><strong>// Função que verifica se a pilha está cheia</strong></span>
<strong>int is_full(struct pilha* pilha) {</strong>
<strong>    return pilha-&gt;topo == TAM_MAX - 1;</strong>
<strong>}

</strong><span style="color: #339966;"><strong>// Função para adicionar um item ao topo da pilha</strong></span>
<strong>void push(struct pilha* pilha, int item) {</strong>
<strong>    if (is_full(pilha)) {</strong>
<strong>        printf("Erro: a pilha está cheia.\n");</strong>
<strong>    }</strong>
<strong>    else {</strong>
<strong>        pilha-&gt;topo++;</strong>
<strong>        pilha-&gt;items[pilha-&gt;topo] = item;</strong>
<strong>    }</strong>
<strong>}

</strong><span style="color: #339966;"><strong>// Função para remover o item do topo da pilha</strong></span>
<strong>int pop(struct pilha* pilha) {</strong>
<strong>    if (is_empty(pilha)) {</strong>
<strong>        printf("Erro: a pilha está vazia.\n");</strong>
<strong>        return -1;</strong>
<strong>    }</strong>
<strong>    else {</strong>
<strong>        int item_removido = pilha-&gt;items[pilha-&gt;topo];</strong>
<strong>        pilha-&gt;topo--;</strong>
<strong>        return item_removido;</strong>
<strong>    }</strong>
<strong>}

</strong><span style="color: #339966;"><strong>// Função para retornar o item do topo da pilha sem removê-lo</strong></span>
<strong>int peek(struct pilha* pilha) {</strong>
<strong>    if (is_empty(pilha)) {</strong>
<strong>        printf("Erro: a pilha está vazia.\n");</strong>
<strong>        return -1;</strong>
<strong>    }</strong>
<strong>    else {</strong>
<strong>        return pilha-&gt;items[pilha-&gt;topo];</strong>
<strong>    }</strong>
<strong>}

</strong><strong>int main()</strong>
<strong>{</strong>
<strong>    struct pilha* minha_pilha = criar_pilha();

</strong><span style="color: #339966;"><strong>    // Adicionar alguns itens à pilha</strong></span>
<strong>    push(minha_pilha, 10);</strong>
<strong>    push(minha_pilha, 20);</strong>
<strong>    push(minha_pilha, 30);</strong>
<strong>    push(minha_pilha, 40);

</strong><span style="color: #339966;"><strong>    // Mostrar o item atual do topo da pilha</strong></span>
<strong>    printf("Item atual do topo: %d\n", peek(minha_pilha));

</strong><span style="color: #339966;"><strong>    // Remover e imprimir o item do topo da pilha</strong></span>
<strong>    printf("Item removido: %d\n", pop(minha_pilha));

</strong><span style="color: #339966;"><strong>    // Mostrar o novo item atual do topo da pilha</strong></span>
<strong>    printf("Item atual do topo: %d\n", peek(minha_pilha));

</strong><strong>    return 0;</strong>
<strong>}</strong></pre>
<h4>Funcionamento</h4>
<p>A estrutura de dados utilizada na implementação é definida através da estrutura pilha, que contém um inteiro topo que armazena o índice do elemento que está no topo da pilha e um array de nome <strong>items</strong> que armazena os elementos da pilha. A pilha tem um tamanho máximo definido pela constante <strong>TAM_MAX</strong>.</p>
<p>O código contém várias funções que operam na pilha. A função<em> criar_pilha()</em> aloca a memória necessária para a pilha e inicializa o topo da pilha com o valor -1. A função <em>is_empty()</em> verifica se a pilha está vazia, ou seja, se o topo da pilha é igual a -1.</p>
<p>A função <em>is_full()</em> verifica se a pilha está cheia, ou seja, se o topo da pilha é igual a TAM_MAX &#8211; 1. A função <em>push()</em> adiciona um elemento ao topo da pilha, verificando se a pilha está cheia antes de adicionar o elemento. A função <em>pop()</em> remove o elemento do topo da pilha, verificando se a pilha está vazia antes de remover o elemento.</p>
<p>A função <em>peek()</em> retorna o elemento atual do topo da pilha, mas sem removê-lo.</p>
<p>O programa principal começa alocando espaço para uma nova pilha chamada <strong>minha_pilha</strong>, utilizando a função criar_pilha(). Em seguida, o programa adiciona alguns elementos à pilha utilizando a função push().</p>
<p>Depois, o programa mostra o elemento atual do topo da pilha utilizando a função peek(). Então, o programa remove e imprime o elemento do topo da pilha utilizando a função pop().</p>
<p>Por fim, o programa mostra o novo elemento atual do topo da pilha utilizando a função peek().</p>
<p>Ao finalizar, o programa retorna o valor 0 para indicar que a execução foi concluída com sucesso.</p>
<p>Note que, para fins de simplicidade, neste exemplo eu usei um tamanho máximo fixo para a pilha (TAM_MAX), mas isso pode ser modificado para permitir pilhas de tamanho variável.</p>
<h3>Conclusão</h3>
<p>Neste artigo vimos como realizar uma implementação básica de pilha em linguagem C usando arrays. Nos próximos artigos estudaremos a implementação de outras estruturas de dados em C, empregando técnicas variadas, inclusive reaproveitando estruturas já criadas anteriormente &#8211; como as pilhas.</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/como-implementar-uma-pilha-em-linguagem-c-usando-array/">Como implementar uma pilha em linguagem C usando array</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/como-implementar-uma-pilha-em-linguagem-c-usando-array/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Estruturas de Decisão Condicional em Linguagem C</title>
		<link>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/estruturas-de-decisao-condicional-em-linguagem-c/</link>
					<comments>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/estruturas-de-decisao-condicional-em-linguagem-c/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Tue, 28 Mar 2023 14:19:01 +0000</pubDate>
				<category><![CDATA[Programação em Linguagem C]]></category>
		<category><![CDATA[Linguagem C]]></category>
		<category><![CDATA[Lógica de Programação]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=19024</guid>

					<description><![CDATA[<p>Decisão Condicional em Linguagem C Em linguagem C, existem três tipos de estruturas de decisão condicional: if, if-else e switch-case. Essas estruturas são fundamentais para controlar o fluxo de execução do programa de acordo com condições específicas. Condicional Simples: a estrutura if A estrutura if permite executar um bloco de código somente se uma condição for verdadeira. A sintaxe é a seguinte: if (condicao) { // bloco de codigo a ser executado se a condicao for verdadeira } Por exemplo: int num = 5; if (num &#62; 0) { printf("O numero e positivo"); } return 0; Neste exemplo, se o valor da variável &#8220;num&#8221; for maior que zero, o bloco de código dentro do if será executado e a mensagem &#8220;O número é positivo&#8221; será exibida na tela. Experimente alterar o valor de num para um número negativo, como -15, e rode novamente o programa. Neste caso, nada será exibido na tela, pois o teste condicional retornará &#8220;falso&#8221;, pulando a execução a instrução do bloco (printf) Condicional composto: a estrutura if-else A estrutura if-else permite executar um bloco de código se uma condição for verdadeira e outro bloco de código se a condição for falsa. A sintaxe é a seguinte: [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/estruturas-de-decisao-condicional-em-linguagem-c/">Estruturas de Decisão Condicional em Linguagem C</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Decisão Condicional em Linguagem C</h2>
<p>Em linguagem C, existem três tipos de estruturas de decisão condicional: if, if-else e switch-case. Essas estruturas são fundamentais para controlar o fluxo de execução do programa de acordo com condições específicas.</p>
<h3>Condicional Simples: a estrutura if</h3>
<p>A estrutura if permite executar um bloco de código somente se uma condição for verdadeira. A sintaxe é a seguinte:</p>
<pre><span style="color: #800080;"><strong>if (condicao) {</strong></span>
<span style="color: #800080;"><strong>  // bloco de codigo a ser executado se a condicao for verdadeira</strong></span>
<span style="color: #800080;"><strong>}</strong></span></pre>
<p>Por exemplo:</p>
<pre><strong>int num = 5;</strong>
<strong>if (num &gt; 0) {</strong>
<strong>  printf("O numero e positivo");</strong>
<strong>}</strong>
<strong>return 0;</strong></pre>
<p>Neste exemplo, se o valor da variável &#8220;num&#8221; for maior que zero, o bloco de código dentro do if será executado e a mensagem &#8220;O número é positivo&#8221; será exibida na tela.</p>
<p>Experimente alterar o valor de num para um número negativo, como -15, e rode novamente o programa. Neste caso, nada será exibido na tela, pois o teste condicional retornará &#8220;falso&#8221;, pulando a execução a instrução do bloco (printf)</p>
<h3>Condicional composto: a estrutura if-else</h3>
<p>A estrutura if-else permite executar um bloco de código se uma condição for verdadeira e outro bloco de código se a condição for falsa. A sintaxe é a seguinte:</p>
<pre><strong><span style="color: #800080;">if (condicao) {</span></strong>
<strong><span style="color: #800080;">  // bloco de codigo a ser executado se a condicao for verdadeira</span></strong>
<strong><span style="color: #800080;">} else {</span></strong>
<strong><span style="color: #800080;">  // bloco de codigo a ser executado se a condicao for falsa</span></strong>
<strong><span style="color: #800080;">}</span></strong></pre>
<p>Por exemplo:</p>
<pre><strong>int num = -3;</strong>
<strong>if (num &gt; 0) {</strong>
<strong>  printf("O numero e positivo");</strong>
<strong>} else {</strong>
<strong>    printf("O numero e negativo");</strong>
<strong>}</strong></pre>
<p>Neste exemplo, se o valor da variável &#8220;num&#8221; for maior que zero, o bloco de código dentro do if será executado e a mensagem &#8220;O número é positivo&#8221; será exibida na tela. Caso contrário, o bloco de código dentro do else será executado e a mensagem &#8220;O número é negativo&#8221; será exibida na tela.</p>
<h3>Condicional encadeado: a estrutura if &#8211; else if &#8211; else</h3>
<p>A estrutura condicional if &#8211; else if &#8211; else é uma das formas mais comuns de controlar o fluxo de um programa em C, permitindo executar diferentes blocos de código dependendo de uma ou mais condições.</p>
<p>A seguir, apresento um tutorial passo a passo para entender e implementar a estrutura condicional if -else if- else em C:</p>
<h4>O básico do if &#8211; else if &#8211; else</h4>
<p>A estrutura do if &#8211; else if &#8211; else começa com a palavra-chave if, seguida de uma expressão entre parênteses que será avaliada como verdadeira ou falsa. Se a expressão for verdadeira, um bloco de código entre chaves {} será executado. Caso contrário, a execução passará para o próximo bloco de código else if, que seguirá o mesmo padrão.</p>
<p>O último bloco de código será sempre um else sem expressão, que será executado caso nenhuma das condições anteriores seja verdadeira.</p>
<pre><span style="color: #800080;"><strong>if (condicao1) {</strong></span>
<span style="color: #800080;"><strong>  // bloco de código a ser executado se a condicao1 for verdadeira</strong></span>
<span style="color: #800080;"><strong>} else if (condicao2) {</strong></span>
<span style="color: #800080;"><strong>  // bloco de código a ser executado se a condicao2 for verdadeira</strong></span>
<span style="color: #800080;"><strong>} else if (condicao3) {</strong></span>
<span style="color: #800080;"><strong>  // bloco de código a ser executado se a condicao3 for verdadeira</strong></span>
<span style="color: #800080;"><strong>} else {</strong></span>
<span style="color: #800080;"><strong>  // bloco de código a ser executado caso nenhuma das condições anteriores seja verdadeira</strong></span>
<span style="color: #800080;"><strong>}</strong></span>
<span style="color: #800080;"><strong>Exemplo de if - else if - else em ação</strong></span></pre>
<p>Vamos supor que temos uma variável idade e queremos imprimir uma mensagem de acordo com a faixa etária. Podemos usar a estrutura if &#8211; else if &#8211; else para isso:</p>
<pre><strong>int idade = 32;</strong>
<strong>if (idade &lt; 18) {</strong>
<strong>  printf("Você é menor de idade");</strong>
<strong>} else if (idade &gt;= 18 &amp;&amp; idade &lt;= 64) {</strong>
<strong>    printf("Você é adulto");</strong>
<strong>} else {</strong>
<strong>    printf("Você é idoso");</strong>
<strong>}</strong></pre>
<p>Nesse exemplo, a variável idade é igual a 32, então a expressão idade &gt;= 18 &amp;&amp; idade &lt;= 64 é verdadeira, e o bloco de código correspondente ao else if é executado, imprimindo a string &#8220;Você é adulto&#8221; no console.</p>
<h4>Dicas para usar o if-else if-else</h4>
<ul>
<li>Lembre-se de colocar cada bloco de código entre chaves {} para garantir que apenas o código que você deseja seja executado em cada condição.</li>
<li>Use o else para tratar casos que não foram tratados pelas condições anteriores.</li>
<li>Lembre-se de que as expressões dentro dos if e else if devem ser avaliadas como verdadeiras ou falsas, e que operadores lógicos como &amp;&amp; e || podem ser usados para combinar várias condições em uma expressão mais complexa.</li>
</ul>
<h3>A estrutura condicional switch-case</h3>
<p>A estrutura condicional switch-case em linguagem C é uma forma de controlar o fluxo do programa com base em um valor específico. O switch é uma instrução que permite a comparação do valor de uma variável com várias possibilidades de valores, e cada possibilidade é associada a um bloco de código executável.</p>
<p>A seguir, apresento um tutorial passo a passo para entender e implementar a estrutura condicional switch-case em C:</p>
<h4>O básico do switch-case</h4>
<p>A estrutura do switch-case começa com a palavra-chave switch seguida por um valor ou uma expressão entre parênteses. Em seguida, é aberto um bloco de código entre chaves {}. O bloco é composto por várias instruções case, cada uma com um valor ou uma constante, seguida de dois pontos : e um bloco de código a ser executado caso o valor da expressão seja igual ao valor daquele case.</p>
<p>Cada bloco de código deve terminar com a palavra-chave break para evitar a execução dos blocos subsequentes.</p>
<pre><span style="color: #800080;"><strong>switch (valor) {</strong></span>
<span style="color: #800080;"><strong>case valor1:</strong></span>
<span style="color: #800080;"><strong>  // bloco de código a ser executado quando o valor for igual a valor1</strong></span>
<span style="color: #800080;"><strong>  break;</strong></span>
<span style="color: #800080;"><strong>case valor2:</strong></span>
<span style="color: #800080;"><strong>  // bloco de código a ser executado quando o valor for igual a valor2</strong></span>
<span style="color: #800080;"><strong>  break;</strong></span>
<span style="color: #800080;"><strong>// mais casos podem ser adicionados aqui</strong></span>
<span style="color: #800080;"><strong>default:</strong></span>
<span style="color: #800080;"><strong>  // bloco de código a ser executado caso nenhum dos casos anteriores seja verdadeiro</strong></span>
<span style="color: #800080;"><strong>}</strong></span></pre>
<h4>Exemplo de switch-case em ação</h4>
<p>Vamos supor que temos uma variável diaDaSemana que representa o dia da semana (de 1 a 7), e queremos imprimir o nome do dia em português. Podemos usar a estrutura switch-case para isso:</p>
<pre><strong>int diaDaSemana = 3;</strong>
<strong>switch (diaDaSemana) {</strong>
<strong>  case 1:</strong>
<strong>    printf("Domingo");</strong>
<strong>    break;</strong>
<strong>  case 2:</strong>
<strong>    printf("Segunda-feira");</strong>
<strong>    break;</strong>
<strong>  case 3:</strong>
<strong>    printf("Terça-feira");</strong>
<strong>    break;</strong>
<strong>  case 4:</strong>
<strong>    printf("Quarta-feira");</strong>
<strong>    break;</strong>
<strong>  case 5:</strong>
<strong>    printf("Quinta-feira");</strong>
<strong>    break;</strong>
<strong>  case 6:</strong>
<strong>    printf("Sexta-feira");</strong>
<strong>    break;</strong>
<strong>  case 7:</strong>
<strong>    printf("Sábado");</strong>
<strong>    break;</strong>
<strong>  default:</strong>
<strong>    printf("Dia da semana inválido");</strong>
<strong>}</strong></pre>
<p>Nesse exemplo, o valor da variável diaDaSemana é 3, então o bloco de código correspondente ao case 3 é executado, e o resultado é a impressão da string &#8220;Terça-feira&#8221; no console.</p>
<h4>Dicas para usar o switch-case</h4>
<ul>
<li>Lembre-se de colocar a palavra-chave break após cada bloco de código dentro do switch, caso contrário, a execução continuará no bloco seguinte.</li>
<li>Use o default para tratar casos que não foram tratados pelos casos anteriores.</li>
<li>Não é possível comparar strings com o switch-case em C. Caso precise comparar strings, considere usar uma biblioteca como a string.h ou uma comparação de strings com um if-else encadeado.</li>
</ul>
<p>É isso aí! Neste tutorial vimos como usar as estruturas de decisão condicional em linguagem C, incluindo os condicionais if /else e o switch/case.</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/estruturas-de-decisao-condicional-em-linguagem-c/">Estruturas de Decisão Condicional em Linguagem C</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/estruturas-de-decisao-condicional-em-linguagem-c/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Vale a pena aprender linguagem C atualmente (2012 / 2022)?</title>
		<link>https://www.bosontreinamentos.com.br/carreira/vale-a-pena-aprender-linguagem-c-atualmente-2012-2022/</link>
					<comments>https://www.bosontreinamentos.com.br/carreira/vale-a-pena-aprender-linguagem-c-atualmente-2012-2022/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Tue, 03 Aug 2021 13:05:05 +0000</pubDate>
				<category><![CDATA[Carreira]]></category>
		<category><![CDATA[Programação em Linguagem C]]></category>
		<category><![CDATA[Linguagem C]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=17896</guid>

					<description><![CDATA[<p>Vale a pena aprender a programar em linguagem C atualmente? Eis uma pergunta bastante interessante feita diversas vezes pelos assinantes do canal da Bóson Treinamentos no YouTube: &#8220;Com tantas linguagens modernas e foco em Web, para que aprender uma linguagem tão antiga, difícil e com poucos recursos como a linguagem C?&#8220; Será que é importante aprender C nos dias de hoje? Ou será perda de tempo? Vou tentar responder a essa pergunta neste artigo. Caso prefira ver (e ouvir) minha opinião em um vídeo, vá para o final do post e assista ao material postado no YouTube há algum tempo. Um pouquinho de história da linguagem C Primeiramente vamos entender de onde veio essa linguagem de programação. A linguagem C foi desenvolvida nos laboratórios Bell pelo cientista da computação Dennis Ritchie, no final de 1972, com o intuito de criar utilitários para rodar no sistema operacional Unix, que fora desenvolvido poucos anos antes. Acabou sendo usada para reescrever o próprio kernel do Unix na época (que havia sido criado originalmente na linguagem Assembly &#8211; pelo próprio Ritchie!). Dennis Ritchie &#8211; o criador da Linguagem C e do sistema operacional Unix Criada em 72? Realmente, a linguagem é antiga (em termos [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/carreira/vale-a-pena-aprender-linguagem-c-atualmente-2012-2022/">Vale a pena aprender linguagem C atualmente (2012 / 2022)?</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Vale a pena aprender a programar em linguagem C atualmente?</h2>
<p>Eis uma pergunta bastante interessante feita diversas vezes pelos assinantes do <a href="https://www.youtube.com/bosontreinamentos" target="_blank" rel="noopener">canal da Bóson Treinamentos no YouTube</a>:</p>
<p>&#8220;<em><strong>Com tantas linguagens modernas e foco em Web, para que aprender uma linguagem tão antiga, difícil e com poucos recursos como a linguagem C?</strong></em>&#8220;</p>
<p>Será que é importante aprender C nos dias de hoje? Ou será perda de tempo? Vou tentar responder a essa pergunta neste artigo. Caso prefira ver (e ouvir) minha opinião em um vídeo, vá para o final do post e assista ao material postado no YouTube há algum tempo.</p>
<h3>Um pouquinho de história da linguagem C</h3>
<p>Primeiramente vamos entender de onde veio essa linguagem de programação. A linguagem C foi desenvolvida nos laboratórios Bell pelo cientista da computação <strong>Dennis Ritchie</strong>, no final de 1972, com o intuito de criar utilitários para rodar no <a href="http://www.bosontreinamentos.com.br/sistemas-bsd-e-derivados-instalacao-e-analise/">sistema operacional Unix</a>, que fora desenvolvido poucos anos antes. Acabou sendo usada para reescrever o próprio kernel do Unix na época (que havia sido criado originalmente na linguagem Assembly &#8211; pelo próprio Ritchie!).</p>
<div id="attachment_17898" style="width: 559px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-17898" class="wp-image-17898" title="Dennis Ritchie - o criador da Linguagem C e do sistema operacional Unix" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2021/08/dennis-ritchie-linguagem-c.jpg" alt="Dennis Ritchie - o criador da Linguagem C e do sistema operacional Unix" width="549" height="438" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2021/08/dennis-ritchie-linguagem-c.jpg 710w, https://www.bosontreinamentos.com.br/wp-content/uploads/2021/08/dennis-ritchie-linguagem-c-420x335.jpg 420w" sizes="auto, (max-width: 549px) 100vw, 549px" /><p id="caption-attachment-17898" class="wp-caption-text">Dennis Ritchie &#8211; o criador da Linguagem C e do sistema operacional Unix</p></div>
<p>Criada em 72? Realmente, a linguagem é antiga (em termos da ciência da computação). Porém, a linguagem é &#8220;atualizada&#8221; de tempos em tempos, com a implementação de alterações para melhorias e inclusão de novos recursos, e o padrão atual da linguagem é chamado de C17, publicado em dezembro de 2018, portanto é recente.</p>
<p>A linguagem está tão viva e bem que uma nova revisão do padrão será publicada a partir do final desse ano (prevista para dezembro de 2021), possivelmente no começo de 2022.</p>
<p>Certo. Então a linguagem, apesar de antiga, ainda é atualizada constantemente. Quais seriam então algumas de suas características principais?</p>
<h3>Características da linguagem C</h3>
<p>Vejamos algumas características técnicas da linguagem C.&nbsp;Ela é uma:</p>
<ul>
<li>Linguagem de propósito geral (pode ser empregada para desenvolver qualquer tipo de aplicação)</li>
<li>Combina características de linguagens de alto nível com linguagens de baixo nível.</li>
<li>Procedural e estruturada</li>
<li>Emprega tipagem estática</li>
<li>Fornece acesso de baixo nível à memória e outros recursos de hardware</li>
<li>Possui estruturas para mapeamento de instruções em linguagem de máquina</li>
<li>Faz uso extensivo de ponteiros</li>
<li>Possui uma grande biblioteca de rotinas disponível</li>
<li>Código contido em subrotinas &#8211; as chamadas funções (é estruturada).</li>
<li>Suporta programação para interface gráfica</li>
<li>É importante notar que C <em><strong>NÃO é uma linguagem orientada a objetos</strong> </em>&#8211; para tal foi criada a <a href="http://www.bosontreinamentos.com.br/programacao-em-c/introducao-a-linguagem-de-programacao-c/">linguagem C++</a>, que traz esses recursos. Existem extensões que permitem que se usem recursos de <a href="http://www.bosontreinamentos.com.br/analise-de-sistemas/conceitos-gerais-de-programacao-orientada-a-objetos/">orientação e objetos</a> em C.</li>
</ul>
<p>A linguagem C inspirou e deu origem a muitas das linguagens de programação existentes hoje, como: <a href="http://www.bosontreinamentos.com.br/category/programacao-em-c/">C++</a>, <a href="http://www.bosontreinamentos.com.br/category/csharp/">C#</a>, Go, <a href="http://www.bosontreinamentos.com.br/category/java/">Java</a>, <a href="http://www.bosontreinamentos.com.br/category/programacao-em-javascript/">JavaScript</a>, <a href="http://www.bosontreinamentos.com.br/category/julia/">Julia</a>, <a href="http://www.bosontreinamentos.com.br/category/programacao-em-python/">Python</a>, <a href="http://www.bosontreinamentos.com.br/programacao-em-ruby/introducao-a-programacao-com-a-linguagem-ruby/">Ruby</a>, Rust e muitas outras.</p>
<h3>Vantagens da linguagem C</h3>
<p>Quais seriam as vantagens de usar C em relação a outras linguagens de programação mais modernas? Existem várias vantagens. A seguir destaco algumas delas:</p>
<ul>
<li>Velocidade. Como possui estruturas de acesso direto ao hardware, produz software extremamente rápido.</li>
<li>Código compacto e portável para inúmeras plataformas (praticamente todas as existentes)</li>
<li>Linguagem de propósito geral, usada para basicamente tudo: aplicações desktop, para servidores, bancos de dados, jogos, aplicações gráficas, programas para cálculos intensivos, computação científica, etc.</li>
<li>Recomendada para desenvolvimento de sistemas embarcados e programação de microcontroladores, aplicações nas quais o tamanho do programa, gerenciamento dos recursos de hardware e tempo de resposta são cruciais.</li>
<li>Amplamente recomendada para escrever aplicações que executem operações de baixo nível, como acesso direto à memória, registradores ou disco.</li>
<li>Ótima linguagem para aprendizado de programação avançada, como estruturas de dados e técnicas gerenciamento de recursos, sendo comumente ensinada em cursos de nível superior.</li>
</ul>
<p>Como desvantagens posso citar a curva de aprendizado, que pode se tornar íngreme conforme o estudante passa para níveis intermediário e avançado, e a dificuldade em se criar determinados tipos de aplicações, devido à ausência de bibliotecas especializadas para determinadas funções &#8211; o que não é um problema tão grave, se lembrarmos que a linguagem C, apesar de se uma linguagem de propósito geral, é recomendada para alguns nichos específicos na verdade &#8211; que veremos mais à frente.</p>
<h3>Rankings de uso da linguagem C</h3>
<p>E como está o uso da linguagem C hoje em dia? Vejamos alguns rankings:</p>
<p>De acordo com o <a href="https://www.tiobe.com/tiobe-index/" target="_blank" rel="noopener">Índice TIOBE</a>, a linguagem C é a linguagem mais mepregada no mundo atualmente (julho / 2021):</p>
<div id="attachment_17899" style="width: 610px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-17899" class="wp-image-17899" title="Índice TIOBE de linguagens de programação - Julho de 2021" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2021/08/indice-tiobe-linguagem-c-julho-2021.jpg" alt="Índice TIOBE de linguagens de programação - Julho de 2021" width="600" height="363" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2021/08/indice-tiobe-linguagem-c-julho-2021.jpg 897w, https://www.bosontreinamentos.com.br/wp-content/uploads/2021/08/indice-tiobe-linguagem-c-julho-2021-420x254.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2021/08/indice-tiobe-linguagem-c-julho-2021-768x465.jpg 768w" sizes="auto, (max-width: 600px) 100vw, 600px" /><p id="caption-attachment-17899" class="wp-caption-text">Índice TIOBE de linguagens de programação &#8211; Julho de 2021</p></div>
<p>Outro ranking de linguagens importante, o <a href="https://pypl.github.io/PYPL.html" target="_blank" rel="noopener">índice PYPL</a>, coloca a linguagem C como a 5ª mais usada no mundo, combinada com a linguagem C++:&nbsp;</p>
<div id="attachment_17901" style="width: 610px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-17901" class="wp-image-17901" title="Índice PYPL de linguagens de programação - Julho de 2021" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2021/08/indice-pypl-linguagem-c-julho-2021.jpg" alt="Índice PYPL de linguagens de programação - Julho de 2021" width="600" height="404" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2021/08/indice-pypl-linguagem-c-julho-2021.jpg 618w, https://www.bosontreinamentos.com.br/wp-content/uploads/2021/08/indice-pypl-linguagem-c-julho-2021-420x283.jpg 420w" sizes="auto, (max-width: 600px) 100vw, 600px" /><p id="caption-attachment-17901" class="wp-caption-text">Índice PYPL de linguagens de programação &#8211; Julho de 2021</p></div>
<p>Apesar de esses rankings não serem estudos &#8220;oficiais&#8221;, eles servem para mostrar a preferência dos profissionais pelas diversas linguagens de programação existentes, e a alta procura pela linguagem C é um claro indicativo de sua importância nos dias de hoje, onde vem encontrando cada vez mais aplicação, principalmente nas áreas de <a href="http://www.bosontreinamentos.com.br/eletronica/eletronica-geral/introducao-aos-microcontroladores/">microcontroladores</a>, <a href="http://www.bosontreinamentos.com.br/eletronica/eletronica-geral/introducao-aos-sistemas-embarcados/">sistemas embarcados</a> e <a href="https://youtu.be/TqI8y1OYGsY" target="_blank" rel="noopener">Internet das Coisas</a>.</p>
<h3>Onde usamos a linguagem C</h3>
<p>Onde eu posso usar C atualmente, afinal? Várias áreas da tecnologia se beneficiam do emprego de linguagem C no desenvolvimento de aplicações diversas. Entre elas podemos citar:</p>
<ul>
<li>Programação de sistemas, drivers e sistemas operacionais. Por exemplo, o kernel do Linux (e também do Windows, Android e iOS) é feito em C.</li>
<li>Softwares para plataformas e ecossistemas diversos, desde supercomputadores a sistemas embarcados.</li>
<li>Programação Web, usando CGI (Common Gateway Interface)</li>
<li>Programação científica e com cálculo numérico</li>
<li>Microcontroladores, como as plataformas Arduino, Texas Instruments, ST Microelectronics, e outras, e aplicações diversas para IoT (Internet of Things / Internet das Coisas)</li>
<li>Construção de compiladores, bibliotecas e interpretadores para outras linguagens, como Python, PHP e Ruby, por exemplo.</li>
<li>Criação de algoritmos para Machine Learning (Aprendizado de Máquina) e Inteligência Artificial.</li>
</ul>
<p>Entre outras.</p>
<h3>Conclusão</h3>
<h4><em><strong>Vale a pena aprender e usar a linguagem C?</strong></em></h4>
<p><strong>Sim, totalmente!</strong></p>
<p>É uma das linguagens mais empregadas para desenvolvimento no mundo, e que continua a crescer ano a ano, principalmente por conta de novas aplicações que demandam código rápido, seguro e com baixa demanda de recursos, como é o caso dos sistemas embarcados, dispositivos para IoT e sistemas críticos, como controladores para aviônica e para equipamentos médicos.</p>
<p>Mas tenha em mente o seguinte: para cada problema, uma solução. A linguagem C não é apropriada em muitos casos, onde simplesmente existem linguagens muito mais simples, focadas e planejadas para um nicho específico.</p>
<h3>E como aprender linguagem C?</h3>
<p>No canal da Bóson Treinamentos no YouTube temos um curso básico de linguagem C, que eu recomendo, e que pode ser acessado por meio do link a seguir:</p>
<p><a href="https://youtube.com/playlist?list=PLucm8g_ezqNqzH7SM0XNjsp25AP0MN82R" target="_blank" rel="noopener">Curso de Linguagem C da Bóson Treinamentos</a></p>
<p>ou ainda ser assistido diretamente aqui:</p>
<p><iframe loading="lazy" title="YouTube video player" src="https://www.youtube.com/embed/videoseries?list=PLucm8g_ezqNqzH7SM0XNjsp25AP0MN82R" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<h3>Bibliografia</h3>
<p>Livros também são uma das melhores formas de aprendizado de programação, e abaixo trago uma pequena bibliografia selecionada com alguns dos melhores livros que eu indico sobre programação em C:</p>
<p>Básico em C:</p>
<ul>
<li><strong>Programando em C &#8211; Volume I &#8211; Fundamentos</strong>. Autor: Ulysses de Oliveira Editora: Ciência Moderna</li>
<li><strong>C Programming for the Absolute Beginner</strong>. Autor: Michael Vine. Editora: Thomson (em inglês)</li>
</ul>
<p>C Avançado:</p>
<ul>
<li><strong>Dominando Algoritmos com C</strong>. Autor: Kyle Loudon Editora: O´Reilly.</li>
</ul>
<p>Do básico ao avançado em C (completo):</p>
<ul>
<li><strong>C: Como Programar</strong>. Autores: Deitel &amp; Deitel. Editora: Prentice Hall</li>
</ul>
<h3>Conteúdo do artigo em vídeo</h3>
<p>Caso prefira, assista ao vídeo &#8220;Vale a pena aprender linguagem C atualmente?&#8221;:</p>
<p><iframe loading="lazy" title="YouTube video player" src="https://www.youtube.com/embed/OxR3YRqLZm8" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/carreira/vale-a-pena-aprender-linguagem-c-atualmente-2012-2022/">Vale a pena aprender linguagem C atualmente (2012 / 2022)?</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/carreira/vale-a-pena-aprender-linguagem-c-atualmente-2012-2022/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Introdução às Strings em Linguagem C</title>
		<link>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/introducao-as-strings-em-linguagem-c/</link>
					<comments>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/introducao-as-strings-em-linguagem-c/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Thu, 12 Dec 2019 12:43:18 +0000</pubDate>
				<category><![CDATA[Programação em Linguagem C]]></category>
		<category><![CDATA[Linguagem C]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=15948</guid>

					<description><![CDATA[<p>Strings em Linguagem C Uma string é um agrupamento de caracteres, como letras, números e símbolos. Em C, as strings são formadas e manipuladas com o emprego de várias estruturas, tais como arrays, funções e ponteiros. Como criar e inicializar strings em C Podemos criar e inicializar strings de várias maneiras em C. Por exemplo, podemos usar um array de caracteres mais um caractere NULL, para terminação da string. Veja o exemplo a seguir: char nome[6] = {'F', 'a', 'b', 'i', 'o', '\0'}; O caractere NULL é representado pela sequência de escape \0 (\zero). Por conta desse caractere, o array criado terá 6 posições, em vez de 5, correspondentes aos caracteres armazenados. A figura a seguir ilustra esse array de caracteres: Outra forma de criar e inicializar uma string em C é usando uma cadeia de literais, ou string literal, que são agrupamentos de caracteres envolvidos em aspas, como podemos ver no exemplo a seguir: char nome[] = "Fabio"; Quando atribuímos uma string literal a um array de caracteres, o número necessário de posições na memória é alocado automaticamente, incluindo o caractere de terminação NULL. Strings e Ponteiros em C As strings são implementadas como um ponteiro para um segmento [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/introducao-as-strings-em-linguagem-c/">Introdução às Strings em Linguagem C</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Strings em Linguagem C</h2>
<p>Uma string é um agrupamento de caracteres, como letras, números e símbolos. Em C, as strings são formadas e manipuladas com o emprego de várias estruturas, tais como <a href="http://www.bosontreinamentos.com.br/programacao-em-linguagem-c/arrays-em-c-declaracao-inicializacao-e-atribuicao-de-valores/" target="_blank" rel="noopener">arrays</a>, funções e <a href="http://www.bosontreinamentos.com.br/programacao-em-linguagem-c/ponteiros-em-c-uma-introducao/" target="_blank" rel="noopener">ponteiros</a>.</p>
<h3>Como criar e inicializar strings em C</h3>
<p>Podemos criar e inicializar strings de várias maneiras em C. Por exemplo, podemos usar um array de caracteres mais um caractere NULL, para terminação da string. Veja o exemplo a seguir:</p>
<pre><strong>char nome[6] = {'F', 'a', 'b', 'i', 'o', '\0'};</strong></pre>
<p>O caractere <strong>NULL</strong> é representado pela sequência de escape <strong>\0</strong> (\zero). Por conta desse caractere, o array criado terá 6 posições, em vez de 5, correspondentes aos caracteres armazenados.</p>
<p>A figura a seguir ilustra esse array de caracteres:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-15953 size-full" title="Array de caracteres em linguagem C" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/12/array-caracteres-linguagem-C-curso.jpg" alt="Array de caracteres em linguagem C" width="873" height="309" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/12/array-caracteres-linguagem-C-curso.jpg 873w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/12/array-caracteres-linguagem-C-curso-420x149.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/12/array-caracteres-linguagem-C-curso-768x272.jpg 768w" sizes="auto, (max-width: 873px) 100vw, 873px" /></p>
<p>Outra forma de criar e inicializar uma string em C é usando uma cadeia de literais, ou string literal, que são agrupamentos de caracteres envolvidos em aspas, como podemos ver no exemplo a seguir:</p>
<pre><strong>char nome[] = "Fabio";</strong></pre>
<p>Quando atribuímos uma string literal a um array de caracteres, o número necessário de posições na memória é alocado automaticamente, incluindo o caractere de terminação NULL.</p>
<h3>Strings e Ponteiros em C</h3>
<p>As strings são implementadas como um ponteiro para um segmento de memória. Ou seja, o nome de uma string é na verdade um ponteiro que aponta para o endereço do primeiro caractere da string na memória.</p>
<p>Veja o exemplo a seguir.</p>
<pre><strong>char *nome = "Fabio";</strong></pre>
<p>Este código declara uma variável ponteiro e atribui a string literal &#8220;<strong>Fabio</strong>&#8221; para o primeiro local de memória (e seguintes) para onde a variável <em><strong>nome</strong></em> aponta. Ou seja, o ponteiro <em>nome</em> aponta para o primeiro caractere na string &#8220;Fabio&#8221;.</p>
<p>No exemplo a seguir, mostramos como uma string pode ser referenciada por meio de ponteiros, e manipulada como um array:</p>
<pre><strong>#include &lt;stdio.h&gt;
#include &lt;locale.h&gt;

</strong><strong>int main (int) {

</strong><strong>  setlocale(LC_ALL, "");
  char *nome = "Fabio";</strong>
<strong>  int x;</strong>
<strong>  printf("\nValor do ponteiro: %p\n", *nome);</strong>
<strong>  printf("\nO ponteiro aponta para: %s\n", nome);</strong>
<strong>  printf("\nOs endereços de memória de cada caractere são:\n");</strong>
<strong>  for (x=0; x&lt;6; x++) {</strong>
<strong>    printf("%p\n",nome[x]);</strong>
<strong>  }
</strong>  <strong>for (x=0; x&lt;6; x++) {
</strong>   <strong> printf("Valor: %c Endereço: %p\n", nome[x],nome[x]);
</strong> <strong> }
</strong>  <strong>return 0;</strong>
<strong>}</strong></pre>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-15954" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/12/strings-linguagem-C-exemplo.jpg" alt="Exemplo de uso de strings em linguagem C" width="485" height="326" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/12/strings-linguagem-C-exemplo.jpg 485w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/12/strings-linguagem-C-exemplo-420x282.jpg 420w" sizes="auto, (max-width: 485px) 100vw, 485px" /></p>
<p>Obs.: Em C, as strings não são identificadas como um tipo de dados. São apenas arrays de caracteres, ao contrário de outras linguagens, como C# ou Java, por exemplo, que implementam as strings como tipos de dados (de referência &#8211; classes, no caso).</p>
<p>Na próxima lição continuaremos o estudo de strings em linguagem C.</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/introducao-as-strings-em-linguagem-c/">Introdução às Strings em Linguagem C</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/introducao-as-strings-em-linguagem-c/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Como instalar o Code::Blocks no Ubuntu e criar um programa de teste em linguagem C</title>
		<link>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/como-instalar-o-codeblocks-no-ubuntu-e-criar-um-programa-de-teste-em-linguagem-c/</link>
					<comments>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/como-instalar-o-codeblocks-no-ubuntu-e-criar-um-programa-de-teste-em-linguagem-c/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Sat, 21 Sep 2019 19:33:40 +0000</pubDate>
				<category><![CDATA[Programação em Linguagem C]]></category>
		<category><![CDATA[Linguagem C]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=15430</guid>

					<description><![CDATA[<p>Instalar o Code::Blocks no Ubuntu Linux Em nosso curso básico de linguagem C aqui no blog (e no canal do YouTube da Bóson Treinamentos) usamos o IDE Code::Blocks, que pode ser obtido no site www.codeblocks.org. O Code::Blocks é um IDE open-source que suporta vários compiladores, incluindo o gcc, MinGW, Intel C++ e Visual C++, entre outros. Este editor é escrito em C++ e suporta as linguagens C, C++ e também Fortran. O IDE Code::Block roda em sistemas Windows, Linux e Mac OS X, e já foi portado também para diversos outros sistemas operacionais como o FreeBSD, OpenBSD e Solaris, entre outros. A instalação no Ubuntu Linux é extremamente simples, resumindo-se a um apt install&#160;básico. Vamos aos procedimentos: Procedimentos de instalação do Code::Blocks Primeiro, atualizamos a lista de pacotes do sistema: $ sudo apt update Vamos aproveitar e instalar um compilador no sistema, que será usado pelo Code::Blocks. Instalaremos o compilador g++, e assim poderemos usar o Code::Blocks para compilar também programas em C++. Digite o comando a seguir: $ sudo apt install g++ E então instalamos o Code::Blocks: $ sudo apt install codeblocks Abrir o Code::Blocks e criar programa de teste Após a instalação do IDE, vamos abri-lo para realizar [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/como-instalar-o-codeblocks-no-ubuntu-e-criar-um-programa-de-teste-em-linguagem-c/">Como instalar o Code::Blocks no Ubuntu e criar um programa de teste em linguagem C</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Instalar o Code::Blocks no Ubuntu Linux</h2>
<p>Em nosso <a href="http://www.bosontreinamentos.com.br/category/programacao-em-linguagem-c/">curso básico de linguagem C</a> aqui no blog (e no <a href="https://www.youtube.com/user/bosontreinamentos" target="_blank" rel="noopener">canal do YouTube da Bóson Treinamento</a>s) usamos o IDE Code::Blocks, que pode ser obtido no site www.codeblocks.org.<br />
O Code::Blocks é um IDE open-source que suporta vários compiladores, incluindo o gcc, MinGW, Intel C++ e Visual C++, entre outros. Este editor é escrito em C++ e suporta as linguagens C, C++ e também Fortran.</p>
<p>O IDE Code::Block roda em sistemas Windows, Linux e Mac OS X, e já foi portado também para diversos outros sistemas operacionais como o FreeBSD, OpenBSD e Solaris, entre outros.</p>
<p>A instalação no Ubuntu Linux é extremamente simples, resumindo-se a um <em>apt install</em>&nbsp;básico. Vamos aos procedimentos:</p>
<h3>Procedimentos de instalação do Code::Blocks</h3>
<p>Primeiro, atualizamos a lista de pacotes do sistema:</p>
<pre>$ sudo apt update</pre>
<p>Vamos aproveitar e instalar um compilador no sistema, que será usado pelo Code::Blocks. Instalaremos o compilador g++, e assim poderemos usar o Code::Blocks para compilar também programas em C++. Digite o comando a seguir:</p>
<pre>$ sudo apt install g++</pre>
<p>E então instalamos o Code::Blocks:</p>
<pre>$ sudo apt install codeblocks</pre>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-15431" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-01.png" alt="Instalar Code::Blocks no Ubuntu Linux" width="723" height="294" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-01.png 723w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-01-420x171.png 420w" sizes="auto, (max-width: 723px) 100vw, 723px" /></p>
<h3>Abrir o Code::Blocks e criar programa de teste</h3>
<p>Após a instalação do IDE, vamos abri-lo para realizar suas configurações iniciais, e então escrever um programa de teste. Digite codeblocks no dash para abrir o programa:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-15432" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-02.png" alt="Instalar Code::Blocks no Ubuntu Linux" width="701" height="239" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-02.png 701w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-02-420x143.png 420w" sizes="auto, (max-width: 701px) 100vw, 701px" /></p>
<p>Aparecerá uma tela de auto-detecção de compiladores. Selecione na lista o compilador a usar e clique em OK:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-15433" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-03.png" alt="Instalar Code::Blocks no Ubuntu Linux" width="676" height="417" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-03.png 676w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-03-420x259.png 420w" sizes="auto, (max-width: 676px) 100vw, 676px" /></p>
<p>Aguarde enquanto o programa é aberto:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-15434" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-04.png" alt="Instalar Code::Blocks no Ubuntu Linux" width="666" height="295" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-04.png 666w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-04-420x186.png 420w" sizes="auto, (max-width: 666px) 100vw, 666px" /></p>
<p>Temos agora a tela inicial do programa:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-15435" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-05.png" alt="Instalar Code::Blocks no Ubuntu Linux" width="650" height="489" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-05.png 944w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-05-420x316.png 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-05-768x578.png 768w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-05-174x131.png 174w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-05-300x225.png 300w" sizes="auto, (max-width: 650px) 100vw, 650px" /></p>
<p>Vamos criar um novo projeto para testá-lo. Criaremos um programa que soma dois números e exibe o resultado na tela. Clique no menu <strong>File, New</strong> e então em <strong>Project…</strong>:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-15436" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-06.png" alt="Instalar Code::Blocks no Ubuntu Linux" width="649" height="203" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-06.png 787w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-06-420x131.png 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-06-768x240.png 768w" sizes="auto, (max-width: 649px) 100vw, 649px" /></p>
<p>Na caixa de diálogo <strong>New from template</strong>, selecione o modelo <strong>Console application</strong> e clique em <strong>Go</strong>:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-15437" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-07.png" alt="Instalar Code::Blocks no Ubuntu Linux" width="657" height="459" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-07.png 657w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-07-420x293.png 420w" sizes="auto, (max-width: 657px) 100vw, 657px" /></p>
<p>Será aberta a caixa de diálogo do assistente de nova aplicação. Clique em <strong>Next</strong> para prosseguir:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-15438" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-08.png" alt="Instalar Code::Blocks no Ubuntu Linux" width="629" height="483" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-08.png 629w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-08-420x323.png 420w" sizes="auto, (max-width: 629px) 100vw, 629px" /></p>
<p>Na próxima tela, selecione a linguagem que será usada para programar. Usaremos a linguagem C. Clique em <strong>Next</strong>:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-15439" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-09.png" alt="Instalar Code::Blocks no Ubuntu Linux" width="623" height="480" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-09.png 623w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-09-420x324.png 420w" sizes="auto, (max-width: 623px) 100vw, 623px" /></p>
<p>Na próxima tela, especifique um título para o projeto (usarei <em>Soma-números</em>) e uma pasta no disco para salvá-lo. Clique em <strong>Next</strong>:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-15440" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-10.png" alt="Instalar Code::Blocks no Ubuntu Linux" width="621" height="481" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-10.png 621w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-10-420x325.png 420w" sizes="auto, (max-width: 621px) 100vw, 621px" /></p>
<p>Na próxima tela, escolha o compilador a ser usado no projeto (usaremos o GCC) e clique em <strong>Finish</strong>:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-15441" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-11.png" alt="Instalar Code::Blocks no Ubuntu Linux" width="622" height="482" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-11.png 622w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-11-420x325.png 420w" sizes="auto, (max-width: 622px) 100vw, 622px" /></p>
<p>Projeto criado! Vamos agora digitar código. Expanda a pasta <strong>Sources</strong> na seção <strong>Management</strong> (lado esquerdo da tela) e dê duplo-clique no arquivo de código-fonte <strong><em>main.c</em></strong>:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-15442" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-12.png" alt="Instalar Code::Blocks no Ubuntu Linux" width="203" height="220"></p>
<p>O arquivo é aberto e já vem com um código de teste pronto &#8211; o famoso <em>Hello World</em>:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-15443" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-13.png" alt="Instalar Code::Blocks no Ubuntu Linux" width="512" height="239" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-13.png 512w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-13-420x196.png 420w" sizes="auto, (max-width: 512px) 100vw, 512px" /></p>
<p>Na barra de ferramentas, clique no botão <strong>Build and Run</strong> para compilar e executar o código de teste:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-15444" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-14.png" alt="Instalar Code::Blocks no Ubuntu Linux" width="144" height="36"></p>
<p>Veja o programa em execução, mostrando a mensagem Hello World!:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-15445" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-15.png" alt="Instalar Code::Blocks no Ubuntu Linux" width="463" height="108" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-15.png 463w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-15-420x98.png 420w" sizes="auto, (max-width: 463px) 100vw, 463px" /></p>
<h3>Criar nosso próprio programa</h3>
<p>Agora, vamos digitar o código a seguir no lugar do código do Hello World, para construirmos nossa aplicação de soma de dois números:</p>
<pre><span style="color: #00ff00;">#include &lt;stdio.h&gt;</span>
<span style="color: #00ff00;">#include &lt;stlib.h&gt;</span>
<strong><span style="color: #0000ff;">int</span></strong> main<span style="color: #ff0000;">()</span>
<span style="color: #ff0000;">{</span>
<strong><span style="color: #0000ff;">    int</span></strong> a,b<span style="color: #ff0000;">;</span>
    printf<span style="color: #ff0000;">(</span><span style="color: #0000ff;">"Vamos somar dois números!\n"</span><span style="color: #ff0000;">);</span>
    printf<span style="color: #ff0000;">(</span><span style="color: #0000ff;">"Digite o primeiro número:\n"</span><span style="color: #ff0000;">);</span>
    scanf<span style="color: #ff0000;">(</span><span style="color: #0000ff;">"%d"</span>,<span style="color: #ff0000;">&amp;</span>a<span style="color: #ff0000;">);</span>
    printf<span style="color: #ff0000;">(</span><span style="color: #0000ff;">"Digite o segundo número:\n"</span><span style="color: #ff0000;">);</span>
    scanf<span style="color: #ff0000;">(</span><span style="color: #0000ff;">"%d"</span>,<span style="color: #ff0000;">&amp;</span>b<span style="color: #ff0000;">);</span>
    printf<span style="color: #ff0000;">(</span><span style="color: #0000ff;">"\n"</span><span style="color: #ff0000;">);</span>
    printf<span style="color: #ff0000;">(</span><span style="color: #0000ff;">"A soma de %d com %d é %d\n"</span>,a, b, a <span style="color: #ff0000;">+</span> b<span style="color: #ff0000;">);</span>
<strong><span style="color: #0000ff;">    return</span></strong> <span style="color: #ff00ff;">0</span>;
}</pre>
<p>Na barra de ferramentas, clique no botão <strong>Build and Run</strong> para compilar e executar o código de nosso programa. Entre com os números como solicitado e pressione <strong>Enter</strong> para realizar o cálculo:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-15446" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-16.png" alt="Instalar Code::Blocks no Ubuntu Linux" width="438" height="163" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-16.png 438w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-16-420x156.png 420w" sizes="auto, (max-width: 438px) 100vw, 438px" /></p>
<p>Perfeito! Code::Blocks instalado e testado com sucesso!</p>
<p>Opcionalmente, podemos testar o aplicativo a partir do terminal do Linux. Para tal, acesse a pasta onde o projeto foi salvo, entre no subdiretório <strong>./bin/Debug</strong> e execute o aplicativo digitando<strong> ./Soma-numeros</strong>:</p>
<pre>$ ./Soma-numeros</pre>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-15447" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-17.png" alt="Instalar Code::Blocks no Ubuntu Linux" width="651" height="224" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-17.png 651w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/code-blocks-ubuntu-linux-17-420x145.png 420w" sizes="auto, (max-width: 651px) 100vw, 651px" /></p>
<p>É isso aí! Até a próxima aula!</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/como-instalar-o-codeblocks-no-ubuntu-e-criar-um-programa-de-teste-em-linguagem-c/">Como instalar o Code::Blocks no Ubuntu e criar um programa de teste em linguagem C</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/como-instalar-o-codeblocks-no-ubuntu-e-criar-um-programa-de-teste-em-linguagem-c/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Unions em Linguagem C</title>
		<link>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/unions-em-linguagem-c/</link>
					<comments>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/unions-em-linguagem-c/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Sat, 21 Sep 2019 17:37:30 +0000</pubDate>
				<category><![CDATA[Programação em Linguagem C]]></category>
		<category><![CDATA[Linguagem C]]></category>
		<category><![CDATA[Microcontrolador]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=15181</guid>

					<description><![CDATA[<p>Unions em Linguagem C Uma Union é uma estrutura de dados em linguagem C que permite agrupar dados de tipos diferentes como um único objeto de dados. Unions&#160;são tipos de dados derivados, cujos membros compartilham o mesmo espaço de armazenamento. Em diferentes situações em um programa, algumas variáveis podem ser importantes, ao passo que outras podem não ser relevantes, e uma union, por compartilhar o espaço entre suas variáveis internas acaba por economizar espaço de armazenamento. Note que apenas um membro da union pode ser referenciado por vez. Como Declarar Unions A declaração de Unions em linguagem C é bem parecida com a declaração de uma estrutura (struct), como podemos ver a seguir: union teste { int a; float b; }; Neste exemplo declaramos uma union de nome teste, que é um tipo de dado contém dois membros: o campo a, para um valor inteiro, e o campo b, para armazenar um dado do tipo float. Uma union pode conter campos de qualquer tipo, incluindo structs e outras unions. Ao declarar uma union, é possível inicializá-la, mas somente com um valor do mesmo tipo do primeiro membro contido na union. Após criar o modelo da union, podemos criar variáveis baseadas [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/unions-em-linguagem-c/">Unions em Linguagem C</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Unions em Linguagem C</h2>
<p>Uma Union é uma estrutura de dados em linguagem C que permite agrupar dados de tipos diferentes como um único objeto de dados. Unions&nbsp;são tipos de dados derivados, cujos membros compartilham o mesmo espaço de armazenamento.</p>
<p>Em diferentes situações em um programa, algumas variáveis podem ser importantes, ao passo que outras podem não ser relevantes, e uma union, por compartilhar o espaço entre suas variáveis internas acaba por economizar espaço de armazenamento.</p>
<p>Note que apenas um membro da union pode ser referenciado por vez.</p>
<h3>Como Declarar Unions</h3>
<p>A declaração de Unions em linguagem C é bem parecida com a declaração de uma estrutura (struct), como podemos ver a seguir:</p>
<pre><span style="color: #800080;">union teste {</span>
<span style="color: #800080;">  int a;</span>
<span style="color: #800080;">  float b;</span>
<span style="color: #800080;">};</span></pre>
<p>Neste exemplo declaramos uma union de nome <strong>teste</strong>, que é um tipo de dado contém dois membros: o campo a, para um valor inteiro, e o campo b, para armazenar um dado do tipo float. Uma union pode conter campos de qualquer tipo, incluindo <a href="http://www.bosontreinamentos.com.br/programacao-em-linguagem-c/estruturas-em-linguagem-c/" target="_blank" rel="noopener">structs</a> e outras unions.</p>
<p>Ao declarar uma union, é possível inicializá-la, mas somente com um valor do mesmo tipo do primeiro membro contido na union.</p>
<p>Após criar o modelo da union, podemos criar variáveis baseadas nele usando a seguinte sintaxe:</p>
<pre><span style="color: #800080;">union teste un01;</span></pre>
<p>Criamos com esta declaração a variável <strong>un01</strong>, que é do tipo <em>teste</em> (union).</p>
<h3>Como Acessar os membros da Union</h3>
<p>Podemos acessar os membros de uma union usando o operador ponto (<strong>.</strong>). Por exemplo, vamos atribuir o valor 15 ao membro a da union teste, e logo após copiar seu valor deste membro para uma variável do programa:</p>
<pre>int valor;
un01.a = 15;
valor = un01.a;
printf("Valor: %d", valor);</pre>
<p>Com uma union somente pode conter valor em um membro por vez, se tentarmos atribuir valores a mais de um membro somente o último valor atribuido será realmente armazenado. Veja o seguinte exemplo:</p>
<pre>union teste un01;

int valor;
un01.a = 15;
un01.b = 20.50;

printf("Valor do membro a: %d\n", un01.a);
printf("Valor do membro b: %f\n", un01.b);</pre>
<p>A saída desse programa mostra o seguinte resultado:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-15426" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/union-linguagem-C-01.jpg" alt="Unions em linguagem C" width="428" height="118" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/union-linguagem-C-01.jpg 428w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/union-linguagem-C-01-420x116.jpg 420w" sizes="auto, (max-width: 428px) 100vw, 428px" /></p>
<p>Note que o valor do membro b está correto (20,50), porém o valor atribuído ao&nbsp;membro a (que é 15) não faz sentido algum. Agora veja o que ocorre se invertermos a ordem de atribuição, desta forma:</p>
<pre>un01.b = 20.50;
un01.a = 15;</pre>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-15427" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/union-linguagem-C-02.jpg" alt="Unions em linguagem C - 02" width="450" height="130" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/union-linguagem-C-02.jpg 450w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/09/union-linguagem-C-02-420x121.jpg 420w" sizes="auto, (max-width: 450px) 100vw, 450px" /></p>
<p>Agora o valor do membro a está correto, mas o do membro b está zerado. Isso mostra claramente que a union somente pode guardar valor em um de seus membros por vez. Se um membro possui valor armazenado, e é atribuído valor e um outro membro, o primeiro membro perde seu conteúdo.</p>
<p>Lembre-se sempre dessa propriedade das unions, pois isso pode causar problemas se não for levado em consideração em seus programas.</p>
<h3>Operações em Unions</h3>
<p>As operações que podems er realizadas em uma union são:</p>
<ul>
<li>Atribuir uma union a outra union do mesmo tipo</li>
<li>Obter o endereço da union (&amp;)</li>
<li>Acessar seus membros com operadores adequados.</li>
</ul>
<p>As unions não podem ser comparadas entre si (assim como as structs).</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/unions-em-linguagem-c/">Unions em Linguagem C</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/unions-em-linguagem-c/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cabeçalhos Padrão &#8211; Standard Headers em Linguagem C</title>
		<link>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/cabecalhos-padrao-standard-headers-em-linguagem-c/</link>
					<comments>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/cabecalhos-padrao-standard-headers-em-linguagem-c/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 19 Jan 2018 19:15:40 +0000</pubDate>
				<category><![CDATA[Programação em Linguagem C]]></category>
		<category><![CDATA[Linguagem C]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=10808</guid>

					<description><![CDATA[<p>Cabeçalhos Padrão na Linguagem C Cada função da biblioteca padrão da linguagem C é declarada em um ou mais Cabeçalhos Padrão (&#8220;Standard Headers&#8220;, ou apenas &#8220;headers&#8220;). Estes contém também definições de tipos e macros que são fornecidas pela linguagem. Os cabeçalhos padrão são conhecidos também como Arquivos de Cabeçalho, poiso conteúdo de cada cabeçalho é, no geral, armazenado em um arquivo, com a extensão .h. A linguagem C padrão atual define 24 arquivos de cabeçalho padrão, listados a seguir: assert.h inttypes.h signal.h stdlib.h complex.h iso646.h stdarg.h string.h ctype.h limits.h stdbool.h tgmath.h errno.h locale.h stddef.h time.h fenv.h math.h stdint.h wchar.h float.h setjmp.h stdio.h wctype.h Como usar os arquivos de cabeçalho Adicionamos o conteúdo de um arquive de cabeçalho (header) a um arquivo de código-fonte usando a diretiva #include, preferencialmente incluída logo no início do arquivo. Por exemplo, suponha que precisamos incluir funções matemáticas presentes no arquivo math.h em um programa. Para tal, usamos a declaração a seguir: #include &#60;math.h&#62; Note que não finalizamos a declaração com um ponto-e-vírgula (;). Essa declaração nos permitirá usar uma série de funções matemáticas definidas no cabeçalho math.h, de forma simples e eficiente. Descrevendo os arquivos de cabeçalho A seguir vamos descrever sucintamente cada um dos arquivos de cabeçalho [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/cabecalhos-padrao-standard-headers-em-linguagem-c/">Cabeçalhos Padrão &#8211; Standard Headers em Linguagem C</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Cabeçalhos Padrão na Linguagem C</h2>
<p>Cada função da biblioteca padrão da linguagem C é declarada em um ou mais <em><strong>Cabeçalhos Padrão</strong></em> (&#8220;<em><strong>Standard Headers</strong></em>&#8220;, ou apenas &#8220;<em><strong>headers</strong></em>&#8220;). Estes contém também definições de tipos e macros que são fornecidas pela linguagem.</p>
<p>Os cabeçalhos padrão são conhecidos também como <strong>Arquivos de Cabeçalho</strong>, poiso conteúdo de cada cabeçalho é, no geral, armazenado em um arquivo, com a extensão <strong>.h</strong>.</p>
<p>A linguagem C padrão atual define 24 arquivos de cabeçalho padrão, listados a seguir:</p>
<table style="height: 167px;" width="549">
<tbody>
<tr>
<td style="width: 130.4px; text-align: center;">assert.h</td>
<td style="width: 130.4px; text-align: center;">inttypes.h</td>
<td style="width: 131.2px; text-align: center;">signal.h</td>
<td style="width: 131.2px; text-align: center;">stdlib.h</td>
</tr>
<tr>
<td style="width: 130.4px; text-align: center;">complex.h</td>
<td style="width: 130.4px; text-align: center;">iso646.h</td>
<td style="width: 131.2px; text-align: center;">stdarg.h</td>
<td style="width: 131.2px; text-align: center;">string.h</td>
</tr>
<tr>
<td style="width: 130.4px; text-align: center;">ctype.h</td>
<td style="width: 130.4px; text-align: center;">limits.h</td>
<td style="width: 131.2px; text-align: center;">stdbool.h</td>
<td style="width: 131.2px; text-align: center;">tgmath.h</td>
</tr>
<tr>
<td style="width: 130.4px; text-align: center;">errno.h</td>
<td style="width: 130.4px; text-align: center;">locale.h</td>
<td style="width: 131.2px; text-align: center;">stddef.h</td>
<td style="width: 131.2px; text-align: center;">time.h</td>
</tr>
<tr>
<td style="width: 130.4px; text-align: center;">fenv.h</td>
<td style="width: 130.4px; text-align: center;">math.h</td>
<td style="width: 131.2px; text-align: center;">stdint.h</td>
<td style="width: 131.2px; text-align: center;">wchar.h</td>
</tr>
<tr>
<td style="width: 130.4px; text-align: center;">float.h</td>
<td style="width: 130.4px; text-align: center;">setjmp.h</td>
<td style="width: 131.2px; text-align: center;">stdio.h</td>
<td style="width: 131.2px; text-align: center;">wctype.h</td>
</tr>
</tbody>
</table>
<h3>Como usar os arquivos de cabeçalho</h3>
<p>Adicionamos o conteúdo de um arquive de cabeçalho (header) a um arquivo de código-fonte usando a diretiva #include, preferencialmente incluída logo no início do arquivo.</p>
<p>Por exemplo, suponha que precisamos incluir funções matemáticas presentes no arquivo math.h em um programa. Para tal, usamos a declaração a seguir:</p>
<pre><span style="color: #ff0000;"><strong>#include &lt;math.h&gt;</strong></span></pre>
<p>Note que não finalizamos a declaração com um ponto-e-vírgula (;). Essa declaração nos permitirá usar uma série de funções matemáticas definidas no cabeçalho math.h, de forma simples e eficiente.</p>
<h3>Descrevendo os arquivos de cabeçalho</h3>
<p>A seguir vamos descrever sucintamente cada um dos arquivos de cabeçalho listados na tabela anterior, e a partir do próximo artigo descreveremos também as funções, tipos e macros por eles definidas.</p>
<h3>assert.h</h3>
<p>Define a macro <strong>assert()</strong>, a qual testa se o valor de uma expressão é diferente de zero.</p>
<h3>complex.h</h3>
<p>Contém protótipos de funções matemáticas com números complexos e macros relacionadas</p>
<h3>ctype.h</h3>
<p>Este cabeçalho contém declarações de funções usadas para converter e classificar caracteres únicos.</p>
<h3>errno.h</h3>
<p>Declara o identificador <strong>errno</strong> para uso como uma variável de status com o tipo int. Várias funções configuram o errno para um valor que indica o tipo de erro encontrado durante a execução.</p>
<h3>fenv.h</h3>
<p>Contém todas as declarações que podem ser usadas ao acessar um ambiente de ponto-flutuante, o qual fornece variáveis de sistema que permitem que os programas lidem de forma simplificada e flexível com modos de controle e exceções de ponto flutuante.</p>
<h3>float.h</h3>
<p>Declara macros que descrevem a faixa de valores, a precisão, e outras propriedades dos tipos <strong>float</strong>, <strong>double</strong> e <strong>long double</strong>.</p>
<h3>inttypes.h</h3>
<p>Esse header inclui o cabeçalho <strong>stdint.h</strong>, e mais extensões dele. O cabeçalho stdint.h define os tipos inteiros com larguras de bits especificadas, incluindo os tipos <strong>intmax_t</strong> e <strong>uintmax_t</strong>, que representam os maiores tipos inteiros implementados.</p>
<h3>iso646.h</h3>
<p>Define onze macros que podem ser usadas como sinônimos para os operadores lógicos e bit a bit da linguagem C. As macros são:</p>
<table style="height: 309px;" width="246">
<tbody>
<tr>
<td style="width: 115.114px;"><strong>Macro</strong></td>
<td style="width: 115.114px;"><strong>Significado</strong></td>
</tr>
<tr>
<td style="width: 115.114px;">and</td>
<td style="width: 115.114px;">&amp;&amp;</td>
</tr>
<tr>
<td style="width: 115.114px;">or</td>
<td style="width: 115.114px;">||</td>
</tr>
<tr>
<td style="width: 115.114px;">not</td>
<td style="width: 115.114px;">!</td>
</tr>
<tr>
<td style="width: 115.114px;">bitand</td>
<td style="width: 115.114px;">&amp;</td>
</tr>
<tr>
<td style="width: 115.114px;">bitor</td>
<td style="width: 115.114px;">|</td>
</tr>
<tr>
<td style="width: 115.114px;">xor</td>
<td style="width: 115.114px;">^</td>
</tr>
<tr>
<td style="width: 115.114px;">compl</td>
<td style="width: 115.114px;">~</td>
</tr>
<tr>
<td style="width: 115.114px;">and_eq</td>
<td style="width: 115.114px;">&amp;=</td>
</tr>
<tr>
<td style="width: 115.114px;">or_eq</td>
<td style="width: 115.114px;">|=</td>
</tr>
<tr>
<td style="width: 115.114px;">xor_eq</td>
<td style="width: 115.114px;">^=</td>
</tr>
<tr>
<td style="width: 115.114px;">not_eq</td>
<td style="width: 115.114px;">!=</td>
</tr>
</tbody>
</table>
<h3>limits.h</h3>
<p>Contém macros que representam o menor e o maior valor representável em cada tipo inteiro.</p>
<h3>locale.h</h3>
<p>Este cabeçalho declara duas funções, <strong>setlocale()</strong> e <strong>localeconv()</strong>, a estrutura <strong>lconv</strong>, a macro NULL para constantes de ponteiro nulas, e as seguintes macros com nomes iniciados em <strong>LC_</strong> para as categorias de informações de localização (locale):</p>
<ul>
<li>LC_ALL</li>
<li>LC_COLLATE</li>
<li>LC_CTYPE</li>
<li>LC_MONETARY</li>
<li>LC_NUMERIC</li>
<li>LC_TIME</li>
</ul>
<h3>math.h</h3>
<p>O cabeçalho math.h declara funções matemáticas para números de ponto-flutuante, e seus tipos e macros relacionados. (As funções matemáticas para números inteiros são declaradas em stdlib.h).</p>
<h3>setjmp.h</h3>
<p>Declara a função <strong>longjmp()</strong>, e define o tipo array <strong>jmp_buf</strong>, além da macro <strong>setjmp()</strong>.</p>
<p>A função setjmp() salva o ambiente de execução atual, incluindo ao menos o registrador momentâneo e os valores da pilha, em uma variável de tipo jmp_buf. Assim, a função setjmp() marca um ponto no programa, para o qual se pode saltar a qualquer momento fazendo uma chamada à função longjmp(). <br />
 Essas funções juntas permitem, desta forma, programar uma espécie de &#8220;goto&#8221; no programa.</p>
<h3>signal.h</h3>
<p>Esse cabeçalho declara as funções <strong>raise()</strong> e <strong>signal()</strong>, assim como macros relacionadas e o tipo inteiro <strong>sig_atomic_t</strong>.</p>
<p>Essas funções permitem tratar sinais por meio de um manipulador de sinais (signal handler). Um manipulador de sinais é uma função que é automaticamente executada quando o programa recebe um determinado sinal do ambiente do sistema operacional.</p>
<p>Cada tipo de sinal que os programas podem receber é identificado por um <em>número de sinal</em>. O cabeçalho signal.h define macros de tipo int que designam os tipos de sinais, sendo que a macros de tipo de sinal requeridas são as seguintes:</p>
<ul>
<li>SIGABRT</li>
<li>SIGFPE</li>
<li>SIGILL</li>
<li>SIGINT</li>
<li>SIGSEGV</li>
<li>SIGTERM</li>
</ul>
<p>Vamos explicar com detalhes o significado e aplicação dessas macros em um artigo específico.</p>
<h3>stdarg.h</h3>
<p>Define um tipo e quatro macros para uso no acesso a argumentos opcionais em funções que os suportam.</p>
<h3>stdbool.h</h3>
<p>Este cabeçalho define as seguintes macros:</p>
<ul>
<li><strong>bool</strong> &#8211; Sinônimo para o tipo _Bool</li>
<li><strong>true</strong> &#8211; A constante de valor 1</li>
<li><strong>false</strong> &#8211; A constante de valor 0</li>
<li><strong>__bool_true_false_are_defined</strong> &#8211; A constante de valor 1</li>
</ul>
<h3>stddef.h</h3>
<p>Este cabeçalho define três tipos e duas macros utilizadas em todos os tipos de programas. Os tipos são:</p>
<ul>
<li>ptrdiff_t &#8211; Tipo inteiro com sinal que representa a diferença entre dois ponteiros</li>
<li>size_t &#8211; Tipo inteiro sem sinal usado para representar o resultado de operações sizeof.</li>
<li>wchar_t &#8211; Tipo inteiro grande o suficiente para armazenar qualquer código no maior grupo de caractere estendido que a implementação suportar.</li>
</ul>
<p>Além dos tipos citados, também são implementadas as duas macros seguintes:</p>
<ul>
<li>NULL &#8211; Representa uma constante de ponteiro nula.</li>
<li>offsetof( tipo_estrutura, memb) &#8211; Fornece uma constante inteira com o tipo size_t cujo valor é o número de bytes entre o início de uma estrutura e o início de seu membro <em>memb</em>.</li>
</ul>
<h3>stdint.h</h3>
<p>Cabeçalho que define tipos inteiros com tamanhos de bit específicos, e macros que indicam as faixas de valor desses e de outros tipos.</p>
<p>Vamos estudar o cabeçalho stdint.h com mais detalhes em outro artigo, devido à sua maior complexidade.</p>
<h3>stdio.h</h3>
<p>Contém declarações de todas as funções básicas para entrada e saída, assim com definições de tipos e macros relacionadas</p>
<p>Vamos estudar o cabeçalho stdio.h com mais detalhes em outro artigo, devido à sua maior complexidade.</p>
<h3>stdlib.h</h3>
<p>Cabeçalho que declara funções de utilidade geral para diversos propósitos, listados a seguir:</p>
<ul>
<li>Geração de números aleatórios</li>
<li>Gerenciamento de memória</li>
<li>Conversão de strings de números em valores numéricos binários</li>
<li>Aritmética de números inteiros</li>
<li>Busca e classificação</li>
<li>Comunicação com o sistema operacional da máquina</li>
<li>Conversão de caracteres multibyte para wide-characters (tipo caractere com tamanho maior que 8 bits; caracteres largos*)</li>
</ul>
<p>Vamos estudar as funções, tipos e macros do cabeçalho stdlib.h com mais detalhes em outro artigo, devido à sua maior complexidade.</p>
<h3>string.h</h3>
<p>O cabeçalho string.h declara diversas funções para manipulação de strings, além de funções que operam em arrays de bytes.</p>
<p>Os nomes das funções aqui declaradas começam com str ou com mem, como as funções <em>strcpy()</em> e <em>memcpy()</em>.</p>
<p>Além disso, esse cabeçalho também declara o tipo size_t e a macro NULL, que representa uma constante de ponteiro nula.</p>
<h3>tgmath.h</h3>
<p>Este cabeçalho inclui os cabeçalhos math.h e complex.h, e define macros de tipo genéricas.</p>
<h3>time.h</h3>
<p>Cabeçalho que declara funções padrão, tipos e macros para manipulação de informações de data e hora. Também declara quatro tipos:</p>
<ul>
<li>size_t &#8211; Tipo inteiro sem sinal usado para representar o resultado de operações sizeof.</li>
<li>clock_t &#8211; Tipo aritmético retornado pela função clock()</li>
<li>time_t &#8211; Tipo aritmético retornado pelas funções timer() e mktime()</li>
<li>struct_tm &#8211; Os membros dessa estrutura representam uma data ou uma hora, divididas em segundos, minutos, horas, dia do mês, e assim por diante.</li>
</ul>
<p>O cabeçalho time.h também define a macro CLOCKS_PER_SEC, que é uma expressão constante do tipo clock_t. Ela permite obter o tempo de uso da CPU pelo programa em segundos, dividindo-se o valor de retorno da função clock() por CLOCKS_PER_SEC.</p>
<h3>wchar.h</h3>
<p>O cabeçalho wchar.h declara funções para strings largas, que são strings de caracteres largos, do tipo wchar_t. Essas funções são similares às declaradas pelos cabeçalhos stdio.h, stdlib.h, string.h e time.h, que declaram funções para processamento de strings de caractere de um byte.</p>
<p>Além disso, o cabeçalho wchar.h também declara funções para realizar a conversão de caracteres multibyte* para caracteres largos*, e vice-versa.</p>
<h3>wctype.h</h3>
<p>Este cabeçalho declara funções para classificar e converter caracteres largos. Estas funções são análogas às funções para caracteres de byte declaradas no cabeçalho ctype.h. Além disso, também declara funções de conversão e classificação de caracteres largos extensíveis.</p>
<pre>*Observações: 

Um caractere multibyte é um caractere composto por sequências de um ou mais bytes. Cada sequência de bytes representa um único caractere no conjunto de caracteres estendido. Os caracteres multibyte são usados nos conjuntos de caracteres como Kanji.

Os caracteres largos são códigos de caracteres multilíngues que sempre têm 16 bits de largura. O tipo para constantes de caractere é char; para caracteres largos, o tipo é wchar_t. Como os caracteres largos são sempre de tamanho fixo, usar caracteres largos simplifica a programação com conjuntos de caracteres internacionais.

<a href="https://msdn.microsoft.com/pt-br/library/z207t55f.aspx" target="_blank" rel="nofollow noopener noreferrer">Fonte: MSDN</a></pre>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/cabecalhos-padrao-standard-headers-em-linguagem-c/">Cabeçalhos Padrão &#8211; Standard Headers em Linguagem C</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/cabecalhos-padrao-standard-headers-em-linguagem-c/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Verificando se uma palavra é um palíndromo em linguagem C</title>
		<link>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/verificando-se-uma-palavra-e-palindromo-em-linguagem-c/</link>
					<comments>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/verificando-se-uma-palavra-e-palindromo-em-linguagem-c/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Tue, 17 Oct 2017 17:50:08 +0000</pubDate>
				<category><![CDATA[Programação em Linguagem C]]></category>
		<category><![CDATA[Linguagem C]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=10734</guid>

					<description><![CDATA[<p>Como verificar se uma palavra é um palíndromo em linguagem C Neste tutorial de linguagem C vamos criar um pequeno programa que permite verificar se uma dada palavra, fornecida pelo usuário, é um palíndromo. De acordo com a Wikipedia: Um palíndromo é uma palavra, frase ou qualquer outra sequência de caracteres que tenha a propriedade de poder ser lida (de forma igual) tanto da direita para a esquerda como da esquerda para a direita. Num palíndromo, normalmente são desconsiderados os sinais ortográficos (diacríticos ou de pontuação), assim como o espaços entre palavras. Ou seja, qualquer sequência de caracteres que seja a mesma se lida da esquerda para a direita ou da direita para a esquerda. Por exemplo, a palavra &#8220;osso&#8221; é um palíndromo, pois é idêntica não importa o sentido da leitura. Para este algoritmo vamos fazer uso de algumas funções de manipulação de strings e importar bibliotecas específicas, como string.h e ctype.h. Vamos ao código. Código #include&#60;stdio.h&#62; #include&#60;string.h&#62; #include&#60;locale.h&#62; #include &#60;ctype.h&#62; int main() { setlocale(LC_ALL, ""); int i, valor = 0; char palavra[15], inversa[15]; printf("\nDigite uma palavra: "); gets(palavra); //Converter a palavra digitada para minúsculas for(i = 0; palavra[i]; i++){ palavra[i] = tolower(palavra[i]); } //Copiar a palavra digitada para [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/verificando-se-uma-palavra-e-palindromo-em-linguagem-c/">Verificando se uma palavra é um palíndromo em linguagem C</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Como verificar se uma palavra é um palíndromo em linguagem C</h2>
<p>Neste tutorial de linguagem C vamos criar um pequeno programa que permite verificar se uma dada palavra, fornecida pelo usuário, é um palíndromo.</p>
<p>De acordo com a Wikipedia:</p>
<blockquote>
<p>Um palíndromo é uma palavra, frase ou qualquer outra sequência de caracteres que tenha a propriedade de poder ser lida (de forma igual) tanto da direita para a esquerda como da esquerda para a direita. Num palíndromo, normalmente são desconsiderados os sinais ortográficos (diacríticos ou de pontuação), assim como o espaços entre palavras.</p>
</blockquote>
<p>Ou seja, qualquer sequência de caracteres que seja a mesma se lida da esquerda para a direita ou da direita para a esquerda. Por exemplo, a palavra &#8220;osso&#8221; é um palíndromo, pois é idêntica não importa o sentido da leitura.</p>
<p>Para este algoritmo vamos fazer uso de algumas funções de manipulação de strings e importar bibliotecas específicas, como <strong>string.h</strong> e <strong>ctype.h</strong>. Vamos ao código.</p>
<h3>Código</h3>
<pre><span style="color: #ff0000;"><strong>#include&lt;stdio.h&gt;</strong></span>
<span style="color: #ff0000;"><strong>#include&lt;string.h&gt;</strong></span>
<span style="color: #ff0000;"><strong>#include&lt;locale.h&gt;</strong></span>
<strong><span style="color: #ff0000;">#include &lt;ctype.h&gt;
</span></strong>
<strong><span style="color: #ff0000;">int main() {</span></strong>
<strong><span style="color: #ff0000;"> setlocale(LC_ALL, "");</span></strong>
<strong><span style="color: #ff0000;"> int i, valor = 0;</span></strong>
<strong><span style="color: #ff0000;"> char palavra[15], inversa[15];
</span></strong>
<strong><span style="color: #ff0000;"> printf("\nDigite uma palavra: ");</span></strong>
<strong><span style="color: #ff0000;"> gets(palavra);

</span><span style="color: #339966;"> //Converter a palavra digitada para minúsculas</span>
<span style="color: #ff0000;"> for(i = 0; palavra[i]; i++){</span></strong>
<strong><span style="color: #ff0000;">   palavra[i] = tolower(palavra[i]);</span></strong>
<strong><span style="color: #ff0000;"> }
</span></strong>
<span style="color: #339966;"><strong> //Copiar a palavra digitada para que seja invertida</strong></span>
<strong><span style="color: #ff0000;"> strcpy(inversa, palavra);
</span></strong>
<span style="color: #339966;"><strong> //Inverter a palavra copiada</strong></span>
<strong><span style="color: #ff0000;"> strrev(inversa);
</span></strong>
<strong><span style="color: #ff0000;"> valor = strcmp(palavra, inversa);
</span></strong>
<strong><span style="color: #ff0000;"> if (valor == 0)</span></strong>
<strong><span style="color: #ff0000;">   printf("\nA palavra %s é palíndroma\n", palavra);</span></strong>
<strong><span style="color: #ff0000;"> else</span></strong>
<strong><span style="color: #ff0000;">   printf("\nA palavra %s não é palíndroma\n", palavra);
</span></strong>
<strong><span style="color: #ff0000;"> return 0;</span></strong>
<strong><span style="color: #ff0000;">}</span></strong></pre>
<p>Crie um novo projeto em C e digite ou copie e cole o código anterior. Compile e execute o programa, fornecendo uma palavra como solicitado no console, e o programa retornará uma mensagem dizendo se a palavra é um palíndromo ou não, como ilustra a figura a seguir:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-10739 size-full" title="Verificar palíndromos em linguagem C" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/verificar-palíndromos-linguagem-C.png" alt="Verificar palíndromos em linguagem C" width="517" height="195" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/verificar-palíndromos-linguagem-C.png 517w, https://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/verificar-palíndromos-linguagem-C-420x158.png 420w" sizes="auto, (max-width: 517px) 100vw, 517px" /></p>
<p>No meu exemplo, entre com a palavra &#8220;Mussum&#8221;, e o programa retornou a mensagem de que esta palavra é um palíndromo.</p>
<p>A seguir, vamos explicar sucintamente o funcionamento do código, assim como das funções empregadas em sua construção.</p>
<h3>Funcionamento</h3>
<ul>
<li>Cabeçalho string.h &#8211; A biblioteca string.h implementa um conjunto simples de funções para manipulação de strings, como funções para comparação e cópia de strings, entre outras. As funções strcpy e strcmp pertencem a esse cabeçalho.</li>
<li>Cabeçalho ctype.h &#8211; O arquivo de cabeçalho ctrype.h implementa diversas funções úteis para manipulação de caracteres, como por exemplo funções para verificar se um caractere é ASCII ou para realizar conversões de maiúsculas para minúsculas e vice-versa. A função tolower pertence a essa biblioteca, assim como muitas outras (toupper, isalpha, isdigit, isspace, etc.).</li>
<li>Função gets() &#8211; Lê a palavra digitada pelo usuário e a armazena na variável <em>palavra</em>.</li>
<li>Função strcpy() &#8211; A função strcpy permite copiar uma string, usando a sintaxe strcpy(destino, origem). Em C, não podemos simplesmente atribuir o conteúdo de uma variável string a outra variável diretamente &#8211; devemos usar funções para tal.</li>
<li>Função strrev() &#8211; A função strrev inverte uma string fornecida, de acordo com a sintaxe: <em>strrev(variável_string)</em>.</li>
<li>Função strcmp() &#8211; A função strcmp é usada para comparar duas strings e verificar se são iguais. Sua sintaxe é strcmp(str1, str2). Se ambas as strings forem iguais, um valor zero é retornado.</li>
<li>Função tolower() &#8211; A função tolower permite converter caracteres em caixa alta para caixa baixa (minúsculas). Sua função inversa é a toupper.</li>
</ul>
<p>Também é possível implementar esse programa sem a necessidade de usar a função strrev(), que não é padrão nas bibliotecas da linguagem C &#8211; em algumas implementações, ela pode não estar presente.</p>
<p>Nesse caso temos de criar nossa própria função para reversão da string, o que faremos na próxima lição.</p>
<p>Próximo: Criando função para inverter string e conferindo palíndromo em linguagem C</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/verificando-se-uma-palavra-e-palindromo-em-linguagem-c/">Verificando se uma palavra é um palíndromo em linguagem C</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/verificando-se-uma-palavra-e-palindromo-em-linguagem-c/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Estruturas em linguagem C</title>
		<link>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/estruturas-em-linguagem-c/</link>
					<comments>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/estruturas-em-linguagem-c/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 13 Oct 2017 12:56:43 +0000</pubDate>
				<category><![CDATA[Programação em Linguagem C]]></category>
		<category><![CDATA[Linguagem C]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=10869</guid>

					<description><![CDATA[<p>Estruturas em linguagem C Uma Estrutura (Structure) em C é uma coleção de variáveis relacionadas, usando um nome comum. As estruturas em linguagem C podem conter variáveis de tipos diferentes de dados, ao contrário de um array, que só pode conter dados de um mesmo tipo. As estruturas são usadas para definir registros que são armazenados em arquivos, e, juntamente com os ponteiros, simplificam a criação de estruturas de dados mais complexas, como por exemplo pilhas, listas ligadas, filas e árvores. Definindo um modelo de Estrutura As estruturas são um tipo de dados derivado, o que significa que são construídas com o uso de objetos de outros tipos existentes. Definimos um modelo de estrutura da forma como mostra a sintaxe seguinte: struct identificador { tipo variável; tipo variável; tipo variável; tipo variável; }; O exemplo a seguir mostra a definição de uma estrutura de nome endereco, contendo os membros rua, numero, CEP e bairro: struct endereco { char rua[50]; char numero[5]; char CEP[8]; char bairro[30]; }; A palavra-chave struct inicia o bloco de definição da estruturas. Logo após vem o nome que desejamos atribuir a ela (tag da estrutura), e então são abertas chaves { para iniciar a seção do corpo da estrutura. Note [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/estruturas-em-linguagem-c/">Estruturas em linguagem C</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Estruturas em linguagem C</h2>
<p>Uma <strong>Estrutura</strong> (<strong>Structure)</strong> em C é uma coleção de variáveis relacionadas, usando um nome comum. As estruturas em linguagem C podem conter variáveis de tipos diferentes de dados, ao contrário de um array, que só pode conter dados de um mesmo tipo.</p>
<p>As estruturas são usadas para definir <em><strong>registros</strong></em> que são armazenados em arquivos, e, juntamente com os ponteiros, simplificam a criação de estruturas de dados mais complexas, como por exemplo pilhas, listas ligadas, filas e árvores.</p>
<h3>Definindo um modelo de Estrutura</h3>
<p>As estruturas são um tipo de dados derivado, o que significa que são construídas com o uso de objetos de outros tipos existentes. Definimos um modelo de estrutura da forma como mostra a sintaxe seguinte:</p>
<pre><span style="color: #800080;"><strong>struct <em>identificador</em> {</strong>
<em><strong> tipo variável;</strong>
<strong> tipo variável;</strong>
<strong> tipo variável;</strong>
<strong> tipo variável;</strong></em>
<strong>};</strong></span></pre>
<p>O exemplo a seguir mostra a definição de uma estrutura de nome endereco, contendo os membros rua, numero, CEP e bairro:</p>
<pre><span style="color: #ff0000;"><strong>struct endereco {</strong></span>
<span style="color: #ff0000;"><strong> char rua[50];</strong></span>
<span style="color: #ff0000;"><strong> char numero[5];</strong></span>
<span style="color: #ff0000;"><strong> char CEP[8];</strong></span>
<span style="color: #ff0000;"><strong> char bairro[30];</strong></span>
<span style="color: #ff0000;"><strong>};</strong></span></pre>
<p>A palavra-chave <strong>struct</strong> inicia o bloco de definição da estruturas. Logo após vem o nome que desejamos atribuir a ela (tag da estrutura), e então são abertas chaves { para iniciar a seção do corpo da estrutura. Note que nenhuma variável é realmente declarada com este comando &#8211; apenas definimos o formato dos dados da estrutura; basicamente, um tipo complexo de variável.</p>
<p>A figura a seguir ilustra a estrutura <strong>endereco</strong>, com suas variáveis-membro:</p>
<div id="attachment_10890" style="width: 474px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-10890" class="wp-image-10890 size-full" title="estrutura endereco na memória do sistema" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2017/10/estrutura-endereco-C.png" alt="estrutura endereco na memória do sistema" width="464" height="435" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2017/10/estrutura-endereco-C.png 464w, https://www.bosontreinamentos.com.br/wp-content/uploads/2017/10/estrutura-endereco-C-420x394.png 420w" sizes="auto, (max-width: 464px) 100vw, 464px" /><p id="caption-attachment-10890" class="wp-caption-text">Fig. 1: Estrutura endereco na memória do sistema</p></div>
<p>No corpo da estrutura são definidas as variáveis (membros) do tipo structure, cada uma com seu próprio nome, sem repetições, e que podem ser de qualquer tipo básico de dados (int, float, char, etc.), ou ainda tipos de dados agregados, como arrays ou até mesmo outras estruturas &#8211; desde que não contenha uma instância de si mesma. É comum chamar os membros de <em>elementos</em> ou ainda <em>campos</em>.</p>
<p>Ao definirmos uma estrutura com um código como o mostrado acima, um novo tipo de dados será criado e poderá ser utilizado para declarar variáveis, sem no entanto ocupar espaço na memória ainda.</p>
<h3>Declarando variáveis do tipo estrutura</h3>
<p>Declaramos variáveis de um tipo estrutura da mesma forma que declaramos variáveis de outros tipos quaisquer. Por exemplo, vamos declarar a variável x para que seja do tipo <em><strong>struct endereco</strong></em> com a declaração a seguir:</p>
<pre><span style="color: #ff0000;"><strong>struct endereco x;</strong></span></pre>
<p>Também é possível declarar uma ou mais variáveis durante a definição da própria estrutura. Por exemplo, podemos declarar três variáveis de nomes <strong>livro1</strong>, <strong>livro2</strong> e <strong>livro3</strong> a partir de uma estrutura de nome <strong>livro</strong>:</p>
<pre><span style="color: #ff0000;"><strong>struct livro </strong></span><span style="color: #ff0000;"><strong>{</strong></span>
<span style="color: #ff0000;"><strong>  char nome[30];</strong></span>
<span style="color: #ff0000;"><strong>  char autor[50];</strong></span>
<span style="color: #ff0000;"><strong>  int paginas;</strong></span>
<span style="color: #ff0000;"><strong>  float preco;</strong></span>
<span style="color: #ff0000;"><strong>} livro1, livro2, livro3;</strong></span></pre>
<p>Caso apenas uma variável do tipo estrutura seja necessária no programa, não precisamos  declarar um identificador, bastando definir o nome da variável que será criada. Por exemplo, podemos criar uma variável estrutura chamada livro da seguinte forma:</p>
<pre><span style="color: #ff0000;"><strong>struct </strong></span><span style="color: #ff0000;"><strong>{</strong></span>
<span style="color: #ff0000;"><strong>  char nome[30];</strong></span>
<span style="color: #ff0000;"><strong>  char autor[50];</strong></span>
<span style="color: #ff0000;"><strong>  int paginas;</strong></span>
<span style="color: #ff0000;"><strong>  float preco;</strong></span>
<span style="color: #ff0000;"><strong>} livro;</strong></span></pre>
<h3>Operações em estruturas</h3>
<p>Podemos realizar algumas operações em estruturas, listadas a seguir:</p>
<ul>
<li>Atribuir uma variável estrutura a outra variável estrutura do mesmo tipo</li>
<li>Ler o endereço de uma variável estrutura</li>
<li>Acessar os membros da estrutura</li>
<li>Determinar o tamanho da estrutura com o operador <strong>sizeof</strong>.</li>
</ul>
<h3>Inicialização de estruturas</h3>
<p>As estruturas podem ser inicializadas de várias formas:</p>
<p>1 &#8211; Usando uma lista de inicialização, como um array. Por exemplo, podemos inicializar a estrutura endereco usando a declaração a seguir:</p>
<pre><span style="color: #ff0000;"><strong>struct endereco x = {"Av. Paulista", "1029", "05560-034", "Cerqueira César"};</strong></span></pre>
<p>Os elementos do array são passados aos membros da estrutura na ordem em que foram declarados.</p>
<p>2 &#8211; Atribuindo uma variável estrutura do mesmo tipo, já inicializada</p>
<p>3 &#8211; Atribuindo valores aos membros individuais da estrutura. Por exemplo, suponha que desejamos atribuir o valor &#8220;Av. Atlântica&#8221; ao membro rua da estrutura endereco. Podemos usar a declaração a seguir, referenciando o nome da variável estrutura, seguida por um ponto e pelo nome do membro (campo) que receberá a atribuição do dado:</p>
<pre><span style="color: #ff0000;"><strong>endereco.rua = "Av. Atlântica";</strong></span></pre>
<h3>Acessando os Membros de uma Estrutura</h3>
<p>Usamos dois operadores para acessar os membros de uma estrutura: </p>
<ul>
<li>Operador de Membro de Estrutura<strong> .</strong> (operador ponto)</li>
<li>Operador de Ponteiro de Estrutura<strong> -&gt;</strong> (operador seta)</li>
</ul>
<p>Acessamos um membro de uma estrutura usando o operador ponto por meio do nome da estrutura, seguido por um ponto e pelo nome do membro que se quer acessar. Por exemplo, podemos acessar e visualizar o membro <strong>rua</strong> da estrutura x (<strong>endereco)</strong> usando a seguinte declaração:</p>
<pre><span style="color: #ff0000;"><strong>printf("%s", x.rua);</strong></span></pre>
<p>Já com o operador de ponteiro de estrutura, o acesso é feito via um ponteiro para a estrutura. Por exemplo, suponha que um ponteiro <strong>xptr</strong> tenha sido declarado e aponte para a estrutura endereco, e que o endereço de uma estrutura x tenha sido atribuído ao ponteiro xprt. Para acessar o membro rua da estrutura endereco via operador de ponteiro usamos a declaração a seguir:</p>
<pre><span style="color: #ff0000;"><strong>printf("%s", x-&gt;rua);</strong></span></pre>
<h3>A instrução typedef</h3>
<p>A instrução <strong>typedef</strong> permite criar aliases (apelidos / sinônimos) para tipos de dados definidos previamente. É muito comum usarmos typedef para definir nomes de tipos estrutura, pois assim conseguimos usar nomes mais curtos ao usar as estruturas no programa. Veja o exemplo a seguir:</p>
<pre><span style="color: #ff0000;"><strong>typedef struct endereco Endereco;</strong></span></pre>
<p>Essa instrução define o tipo de nome <strong>Endereco</strong>  como sendo um sinônimo do tipo <strong>struct endereco</strong>. Também é possível usar typedef diretamente na declaração da estrutura, dispensando a necessidade de criar uma tag, como no exemplo a seguir:</p>
<pre><span style="color: #ff0000;"><strong>typedef struct {</strong></span>
<span style="color: #ff0000;"><strong> char rua[40];</strong></span>
<span style="color: #ff0000;"><strong> char numero[5];</strong></span>
<span style="color: #ff0000;"><strong> char CEP[10];</strong></span>
<span style="color: #ff0000;"><strong> char bairro[30];</strong></span>
<span style="color: #ff0000;"><strong>} Endereco;</strong></span></pre>
<p>Desta forma, podemos usar a palavra <strong>Endereco</strong> para declarar variáveis do tipo estrutura endereco que usamos anteriormente, como segue:</p>
<pre><span style="color: #ff0000;"><strong>Endereco x;</strong></span></pre>
<p>Também podemos criar um array de estruturas:</p>
<pre><span style="color: #ff0000;"><strong>Endereco x[20];</strong></span></pre>
<p>Neste caso, foi criado um array de nome <strong>x</strong>, contendo 20 estruturas do tipo Endereco.</p>
<h3>Exemplo</h3>
<p>No exemplo a seguir é declarada um modelo de estrutura de nome Endereco, usando a instrução typedef, e no código principal esse modelo é usado para declarar uma estrutura &#8220;x&#8221;, do tipo Endereco, a qual é inicializada na sequência.</p>
<p>O conteúdo de cada membro da estrutura é então mostrado na tela com o uso da instrução printf():</p>
<pre><span style="color: #ff0000;"><strong>#include &lt;stdio.h&gt;</strong></span>
<span style="color: #ff0000;"><strong>#include &lt;stdlib.h&gt;</strong></span>
<span style="color: #ff0000;"><strong>#include &lt;locale.h&gt;
</strong></span>
<span style="color: #ff0000;"><strong>typedef struct {</strong></span>
<span style="color: #ff0000;"><strong> char rua[40];</strong></span>
<span style="color: #ff0000;"><strong> char numero[5];</strong></span>
<span style="color: #ff0000;"><strong> char CEP[10];</strong></span>
<span style="color: #ff0000;"><strong> char bairro[30];</strong></span>
<span style="color: #ff0000;"><strong>} Endereco;
</strong></span>
<span style="color: #ff0000;"><strong>int main()</strong></span>
<span style="color: #ff0000;"><strong>{</strong></span>
<span style="color: #ff0000;"><strong> setlocale(LC_ALL,"");
</strong></span>
<span style="color: #ff0000;"><strong> Endereco x = {"Av. Paulista", "1029", "05560-034", "Cerqueira César"};</strong></span>
<span style="color: #ff0000;"><strong> printf("%s\n", x.rua);</strong></span>
<span style="color: #ff0000;"><strong> printf("%s\n", x.numero);</strong></span>
<span style="color: #ff0000;"><strong> printf("%s\n", x.CEP);</strong></span>
<span style="color: #ff0000;"><strong> printf("%s\n", x.bairro);
</strong></span>
<span style="color: #ff0000;"><strong> return 0;</strong></span>
<span style="color: #ff0000;"><strong>}</strong></span></pre>
<p>A imagem a seguir mostra o resultado da execução deste programa:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-10896 size-full" title="Exemplo de estruturas em linguagem C" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2017/10/estruturas-linguagem-c-exemplo.jpg" alt="Exemplo de estruturas em linguagem C" width="537" height="111" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2017/10/estruturas-linguagem-c-exemplo.jpg 537w, https://www.bosontreinamentos.com.br/wp-content/uploads/2017/10/estruturas-linguagem-c-exemplo-420x87.jpg 420w" sizes="auto, (max-width: 537px) 100vw, 537px" /></p>
<p>É isso aí! Na próxima lição vamos nos aprofundar no assunto de estruturas em linguagem C. Até!</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/estruturas-em-linguagem-c/">Estruturas em linguagem C</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/estruturas-em-linguagem-c/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title>Ponteiros em C &#8211; Indireção Múltipla</title>
		<link>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/ponteiros-em-c-indirecao-multipla/</link>
					<comments>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/ponteiros-em-c-indirecao-multipla/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Sun, 24 Sep 2017 21:07:16 +0000</pubDate>
				<category><![CDATA[Programação em Linguagem C]]></category>
		<category><![CDATA[Linguagem C]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=10793</guid>

					<description><![CDATA[<p>Indireção Múltipla de Ponteiros Podemos ter um ponteiro que aponte para um outro ponteiro, o qual por sua vez aponta para uma variável comum com um valor armazenado na memória. Chamamos a essa técnica de Indireção Múltipla, ou ainda Ponteiros para Ponteiros, em contraste com a Indireção Simples, que ocorre quando um ponteiro aponta para uma variável diretamente. Um ponteiro comum pode ser representado da seguinte forma: Já um ponteiro para ponteiro pode ser representado assim: Um ponteiro para ponteiro deve ser declarado de forma especial. Para isso, adicionamos mais um caractere * na frente do nome da variável ponteiro em sua declaração. Veja o exemplo seguinte: int **valor; Essa declaração cria um ponteiro de nome valor, o qual irá apontar para outro ponteiro, o qual por sua vez aponta para uma variável do tipo int. Atenção: neste exemplo, valor NÃO é um ponteiro para um número inteiro, e sim um ponteiro para um ponteiro de inteiro. Acessando o valor apontado com indireção múltipla Para acessar o valor final armazenado e apontado por um inteiro para ponteiro, usamos o operador ** também. Veja o exemplo a seguir: #include &#60;stdio.h&#62; #include &#60;stdlib.h&#62; #include &#60;locale.h&#62; int main() { setlocale(LC_ALL, ""); int a [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/ponteiros-em-c-indirecao-multipla/">Ponteiros em C &#8211; Indireção Múltipla</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Indireção Múltipla de Ponteiros</h2>
<p>Podemos ter um ponteiro que aponte para um outro ponteiro, o qual por sua vez aponta para uma variável comum com um valor armazenado na memória.</p>
<p>Chamamos a essa técnica de <strong>Indireção Múltipla</strong>, ou ainda <strong>Ponteiros para Ponteiros</strong>, em contraste com a Indireção Simples, que ocorre quando um ponteiro aponta para uma variável diretamente.</p>
<p>Um ponteiro comum pode ser representado da seguinte forma:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-10796" title="Ponteiros em C - Indireção Simples" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/ponteiros-C-indireção-simples-figura.jpg" alt="Ponteiros em C - Indireção Simples" width="650" height="168" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/ponteiros-C-indireção-simples-figura.jpg 809w, https://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/ponteiros-C-indireção-simples-figura-420x109.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/ponteiros-C-indireção-simples-figura-768x198.jpg 768w" sizes="auto, (max-width: 650px) 100vw, 650px" /></p>
<p>Já um ponteiro para ponteiro pode ser representado assim:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-10797" title="Ponteiros em C - Indireção Múltipla" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/ponteiros-C-indireção-múltipla-figura.jpg" alt="Ponteiros em C - Indireção Múltipla" width="702" height="151" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/ponteiros-C-indireção-múltipla-figura.jpg 972w, https://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/ponteiros-C-indireção-múltipla-figura-420x90.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/ponteiros-C-indireção-múltipla-figura-768x165.jpg 768w" sizes="auto, (max-width: 702px) 100vw, 702px" /></p>
<p>Um ponteiro para ponteiro deve ser declarado de forma especial. Para isso, adicionamos mais um caractere * na frente do nome da variável ponteiro em sua declaração.</p>
<p>Veja o exemplo seguinte:</p>
<pre><span style="color: #ff0000;"><strong>int **valor;</strong></span></pre>
<p>Essa declaração cria um ponteiro de nome valor, o qual irá apontar para outro ponteiro, o qual por sua vez aponta para uma variável do tipo int.</p>
<p>Atenção: neste exemplo, <em>valor</em> NÃO é um ponteiro para um número inteiro, e sim um ponteiro para um ponteiro de inteiro.</p>
<h3>Acessando o valor apontado com indireção múltipla</h3>
<p>Para acessar o valor final armazenado e apontado por um inteiro para ponteiro, usamos o operador ** também. Veja o exemplo a seguir:</p>
<pre><span style="color: #ff0000;"><strong>#include &lt;stdio.h&gt;</strong></span>
<span style="color: #ff0000;"><strong>#include &lt;stdlib.h&gt;</strong></span>
<span style="color: #ff0000;"><strong>#include &lt;locale.h&gt;</strong></span>
<span style="color: #ff0000;"><strong>int main()</strong></span>
<span style="color: #ff0000;"><strong>{</strong></span>
<span style="color: #ff0000;"><strong> setlocale(LC_ALL, "");</strong></span>
<span style="color: #ff0000;"><strong> int a = 40;</strong></span>
<span style="color: #ff0000;"><strong> int *pont1;</strong></span>
<span style="color: #ff0000;"><strong> int **pont2;</strong></span>
<span style="color: #ff0000;"><strong> pont1 = &amp;a;</strong></span>
<span style="color: #ff0000;"><strong> pont2 = &amp;pont1;</strong></span>
<span style="color: #ff0000;"><strong> printf("O endereço da variável a é: %p\n", &amp;a);</strong></span>
<span style="color: #ff0000;"><strong> printf("O endereço do ponteiro pont1 é: %p\n", &amp;pont1);</strong></span>
<span style="color: #ff0000;"><strong> printf("O endereço do ponteiro pont2 é: %p\n", &amp;pont2);</strong></span>
<span style="color: #ff0000;"><strong> printf("O endereço apontado por pont1 é %p\n", pont1);</strong></span>
<span style="color: #ff0000;"><strong> printf("O endereço apontado por pont2 é %p\n", pont2);</strong></span>
<span style="color: #ff0000;"><strong> printf("E o valor armazenado em a é: %d\n", **pont2);</strong></span>
<span style="color: #ff0000;"><strong> return 0;</strong></span>
<span style="color: #ff0000;"><strong>}</strong></span></pre>
<p>Neste exemplo de código, criamos uma variável <strong>a</strong>, do tipo inteiro e cujo conteúdo é o número 40.</p>
<p>Também criamos dois ponteiros: <strong>pont1</strong> e <strong>pont2</strong>. O ponteiro pont1 aponta para a variável a, ao passo que o ponteiro pont2 aponta para o ponteiro pont1.</p>
<p>Na sequência, exibimos na tela o conteúdo de a, seu endereço, e os endereços relacionados aos dois ponteiros criados, usando a função printf().</p>
<p>Veja o código em execução:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-10798 size-full" title="Indireção múltipla em ponteiros em linguagem C" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/ponteiros-linguagem-C-indireção-múltipla-exemplo.jpg" alt="Indireção múltipla em ponteiros em linguagem C" width="453" height="108" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/ponteiros-linguagem-C-indireção-múltipla-exemplo.jpg 453w, https://www.bosontreinamentos.com.br/wp-content/uploads/2017/09/ponteiros-linguagem-C-indireção-múltipla-exemplo-420x100.jpg 420w" sizes="auto, (max-width: 453px) 100vw, 453px" /></p>
<p>Ao executar o programa, vemos que o endereço da variável a é 0x0060FF0c, e que os endereços dos ponteiros pont1 e pont2 são 0x0060FF08 e 0x00FF04, respectivamente.</p>
<p>Vemos então que pont1 aponta para o endereço de final FF0C, que é o endereço da variável a, e que pont aponta para o endereço de final FF08, que é o endereço do ponteiro pont1. E ao lermos o conteúdo apontado por pont2, é mostrado o conteúdo da variável a (40), por meio da indireção múltipla.</p>
<p>Na próxima lição vamos tratar da Inicialização de Ponteiros.</p>
<p>Até!</p>
<p>Anterior: <a href="http://www.bosontreinamentos.com.br/programacao-em-linguagem-c/ponteiros-em-c-aritmetica-de-ponteiros/">Aritmética de Ponteiros em C</a></p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/ponteiros-em-c-indirecao-multipla/">Ponteiros em C &#8211; Indireção Múltipla</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/programacao-em-linguagem-c/ponteiros-em-c-indirecao-multipla/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
