A partir de que momento eu posso dizer que sei programar em C? [RESOLVIDO]

1. A partir de que momento eu posso dizer que sei programar em C? [RESOLVIDO]

Benicio Torres
BenicioUb

(usa Ubuntu)

Enviado em 03/01/2019 - 16:39h


estou estudando linguagem C, e esse é meu primeiro contato com programação, já conheço a sintaxe, bibliotecas básicas, variáveis, e meio que já "domino" a parte de estruturas de condição e repetição, quais "tópicos" falta ainda estudar para me intitular um conhecedor da linguagem e dizer com segurança que sei programar em C?
e vocês poderiam me explicar de forma sucinta o que são vetores e ponteiros? queria ter uma noçãozinha enquanto não começo a estudar


  


2. Re: A partir de que momento eu posso dizer que sei programar em C?

-
BiaMonteiro

(usa Arch Linux)

Enviado em 03/01/2019 - 17:08h

Pergunta difícil a sua, mas tentarei respondê-la. Para você poder "dizer que sabe C", o mesmo também é válido para outras linguagens, você deverá ter familiaridade com a linguagem. No momento em que você encontra um problema, saber como desenvolver um programa em C que o solucione, já ter uma ideia mentalmente de como ele será escrito. Não somente isso, você deve praticar muitos exercícios de programação (https://www.vivaolinux.com.br/dica/Lista-de-exercicios-de-programacao), ler muito código (https://github.com/trending/c), afinal, todo bom escritor é antes de tudo um bom leitor, ter conhecimento sobre todos os tipos de dados da linguagem, como structs, union, float e outros, saber como utilizar a biblioteca padrão da linguagem (https://en.wikipedia.org/wiki/C_standard_library) e saber para que serve cada palavra reservada (linguagemc.com.br/lista-de-palavras-reservadas-em-c/).

Vetores = entenda-os como um arranjo de elementos de mesmo tipo. Exemplo: vetor nomes = {"Beatriz", "Eduardo", "José", "Júlia", "Renata", "Alice"}.

Ponteiros = Int é um tipo de dado que armazena um inteiro. Float um número com casas decimais. Ponteiro é um que armazena endereços de memórias. Para cada variável declarada no código, o kernel do sistema operacional reserva um espaço em sua memória RAM para poder trabalhar com essa variável. À localização desse espaço, atribui-se o nome de endereço de memória.

Boa programação! =)


3. Re: A partir de que momento eu posso dizer que sei programar em C?

Paulo
paulo1205

(usa Ubuntu)

Enviado em 04/01/2019 - 01:31h

A primeira pergunta é análoga a “a partir de que momento você pode dizer que é fluente em Inglês?” (ou Alemão, ou Russo, ou Mandarim, ou Sânscrito etc.). É difícil dizer com certeza, mas tipicamente envolve conhecer suficientemente bem:

  • seu vocabulário, ou ao menos aquela parte do vocabulário que é mais comum ou ligado à área do seu interesse (no caso de uma linguagem de programação simples como o C, o vocabulário é um conjunto pequeno, fácil de ser totalmente conhecido);

  • a gramática, com suas regras sintáticas, que determinam onde e como é possível dispor os vocábulos, e extrair sentidos claros a partir dessa disposição; e

  • o linguajar e as expressões típicos de outros falantes do idioma (que, no caso do C, pode incluir a biblioteca padrão e as formas usuais de fazer determinadas operações comuns, tais como incrementar o valor de uma variável, varrer um array, passar argumentos por valor e por referência etc.).

“Suficientemente bem” não quer dizer conhecer tudo, mas saber bem aquilo que é mais comum no dia-a-dia, e estar apto para (re)aprender o que é menos comum sem ter de fazer um esforço muito grande.



Vetores em C são normalmente chamados de arrays, e são dados compostos por vários elementos de mesmo tipo e dispostos em posições adjacentes na memória. São exemplos de arrays as seguintes declarações.
char nome[50];  // Declara ‘nome’ como array com 50 elementos do tipo char.
double coeficientes[4]={2.5, 3, -4.25, 1.5}; // Declara ‘coeficientes’ como array com 4 elementos do tipo Double, e atribui seus valores iniciais.
int rgb_parts[]={45, 163, 255}; // Declara ‘rgb_parts’ como array com 3 elementos inteiros (faz o compilador calcular a quantidade de elementos na atribuição de valores iniciais).
double matriz_rot_xy[3][3]={ {0, 1, 0}, {-1, 0, 0}, {0, 0, 1} }; // Declara ‘matriz_rot_xy’ como array com 3 elementos do tipo “array com 3 elementos do tipo double”.


Ponteiros, por outro lado, são valores que indicam um endereço de memória e, ao mesmo tempo, carregam a informação de qual tipo de dado estará guardado nesse endereço, se tal endereço for válido no contexto de execução do programa.

Você possivelmente notou que, nas definições que eu coloquei acima, eu falei de arrays e ponteiros como dados ou como valores, e não como tipos de dados ou como categorias de variáveis. Isso foi proposital. Não porque tais tipos não existam (nas declarações de exemplo eu inclusive digo quais são os tipos de cada array declarado), mas porque é possível produzir ponteiros em C sem declarar qualquer variável de um tipo ponteiro e também porque um ponteiro pode ser usado para indicar transitoriamente um (ou um pedaço de um) array.

Esse uso intercambiável em certas situações não significa que arrays e ponteiros são equivalentes ou que possam sempre trocar de lugar um com o outro, ainda que esse seja um ponto de confusão para muitas pessoas que estão aprendendo C. Esse é, aliás, é um aspecto que pode entrar na avaliação do grau de fluência que alguém tem com o C.

O fato é que tanto variáveis de tipos ponteiros quanto variáveis de tipos arrays produzem valores de tipos ponteiros quando tais variáveis aparecem como parte de uma expressão (com apenas três exceções no caso de arrays, que são no momento da declaração, com ou sem atribuição de valores iniciais aos elementos, e quando a variável é passada como argumento dos operadores unários & e sizeof). Um ponteiro para dado do tipo X é substituído pelo valor do endereço do dado do tipo X ao qual se refere, e um array para dado do tipo X produz um valor que é equivalente a um ponteiro para seu primeiro elemento. Uma restrição a mais para os ponteiros obtidos a partir de arrays é o fato de que seu decaimento para ponteiros gera sempre rvalues, o que significa que uma variável declarada como array não pode ser substituída com outro array (nem muito menos ponteiro) após ter sido declarada, ao passo que uma variável ponteiro que não tenha sido declarada como constante pode ter seu valor livremente modificado várias vezes ao longo do programa.


4. Re: A partir de que momento eu posso dizer que sei programar em C? [RESOLVIDO]

Paulo Bonfanti
pbonfanti

(usa Debian)

Enviado em 05/01/2019 - 08:42h

paulo1205 escreveu:

A primeira pergunta é análoga a “a partir de que momento você pode dizer que é fluente em Inglês?” (ou Alemão, ou Russo, ou Mandarim, ou Sânscrito etc.). É difícil dizer com certeza, mas tipicamente envolve conhecer suficientemente bem o vocabulário (ao menos aquele que é mais comum ou ligado à área do seu interesse; no caso de uma linguagem de programação simples como o C, é um conjunto pequeno, fácil de ser totalmente conhecido), a gramática (regras sintáticas) e o linguajar e as expressões típicos de outros falantes do idioma (que, no caso do C, pode incluir a biblioteca padrão e as formas usuais de fazer determinadas operações comuns, tais como incrementar o valor de uma variável, varrer um array, passar argumentos por valor e por referência etc.).

“Suficientemente bem” não quer dizer conhecer tudo, mas saber bem aquilo que é mais comum no dia-a-dia, e estar apto para (re)aprender o que é menos comum sem ter de fazer um esforço muito grande.

Vetores em C são normalmente chamados de arrays, e são dados compostos por vários elementos de mesmo tipo e dispostos em posições adjacentes na memória. São exemplos de arrays as seguintes declarações.
char nome[50];  // Declara ‘nome’ como array com 50 elementos do tipo char.
double coeficientes[4]={2.5, 3, -4.25, 1.5}; // Declara ‘coeficientes’ como array com 4 elementos do tipo Double, e atribui seus valores iniciais.
int rgb_parts[]={45, 163, 255}; // Declara ‘rgb_parts’ como array com 3 elementos inteiros (faz o compilador calcular a quantidade de elementos na atribuição de valores iniciais).
double matriz_rot_xy[3][3]={ {0, 1, 0}, {-1, 0, 0}, {0, 0, 1} }; // Declara ‘matriz_rot_xy’ como array com 3 elementos do tipo “array com 3 elementos do tipo double”.


Ponteiros, por outro lado, são valores que indicam um endereço de memória e, ao mesmo tempo, carregam a informação de qual tipo de dado estará guardado nesse endereço, se tal endereço for válido no contexto de execução do programa.

Você possivelmente notou que, nas definições que eu coloquei acima, eu falei de arrays e ponteiros como dados ou como valores, e não como tipos de dados ou como categorias de variáveis. Isso foi proposital. Não porque tais tipos não existam (nas declarações de exemplo eu inclusive digo quais são os tipos de cada array declarado), mas porque é possível produzir ponteiros em C sem declarar qualquer variável de um tipo ponteiro e também porque um ponteiro pode ser usado para indicar transitoriamente um (ou um pedaço de um) array.

Esse uso intercambiável em certas situações não significa que arrays e ponteiros são equivalentes ou que possam sempre trocar de lugar um com o outro, ainda que esse seja um ponto de confusão para muitas pessoas que estão aprendendo C. Esse é, aliás, é um aspecto que pode entrar na avaliação do grau de fluência que alguém tem com o C.

O fato é que tanto variáveis de tipos ponteiros quanto variáveis de tipos arrays produzem valores de tipos ponteiros quando tais variáveis aparecem como parte de uma expressão (com apenas três exceções no caso de arrays, que são no momento da declaração, com ou sem atribuição de valores iniciais aos elementos, e quando a variável é passada como argumento dos operadores unários & e sizeof). Um ponteiro para dado do tipo X é substituído pelo valor do endereço do dado do tipo X ao qual se refere, e um array para dado do tipo X produz um valor que é equivalente a um ponteiro para seu primeiro elemento. Uma restrição a mais para os ponteiros obtidos a partir de arrays é o fato de que seu decaimento para ponteiros gera sempre rvalues, o que significa que uma variável declarada como array não pode ser substituída com outro array (nem muito menos ponteiro) após ter sido declarada, ao passo que uma variável ponteiro que não tenha sido declarada como constante pode ter seu valor livremente modificado várias vezes ao longo do programa.


Essa sua resposta saiu tão completa que devia ser pinada. É praticamente um artigo.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts