Noções básicas de armazenamento de variáveis ​​para Programming C

armazenamento digital é medida em bytes. Embora apresentado na linguagem de programação C, toda a informação armazenada dentro da memória é simplesmente uma massa de dados, bits empilhados sobre bits, bytes em cima bytes. É até o software para fazer sentido de tudo isso.

Introdução de armazenamento variável

Na programação C, os dados são classificados por tipo de armazenamento (char, int, float, ou duplo) e ainda classificados por palavra-chave (longo, curto, assinado ou não assinado). Apesar do caos dentro da memória, o armazenamento do seu programa está organizado em esses valores, pronto para ser usado em seu código.

Dentro de um programa em execução, uma variável é descrito esses atributos:

  • Nome: o nome atribuído à variável. O nome é usado apenas em seu código, e não quando o programa é executado.

  • Digitar: um dos tipos de variáveis ​​da linguagem C: char, int, float, e duplos.

  • Conteúdo: definir em seu programa quando uma variável é atribuído um valor. Embora os dados no local de armazenamento da variável pode existir de antemão, é considerado lixo, ea variável não inicializada é considerado até que seja atribuído um valor.

  • Localização: um endereço, um local dentro da memória do dispositivo. Este aspecto de uma variável é algo que você não precisa dictate- o sistema operacional programa e negociar onde a informação é armazenada internamente. Quando o programa é executado, ele utiliza o local para acessar dados de uma variável.

Destes aspectos, nome, tipo e conteúdo da variável já são conhecidos para você. A localização do variável também pode ser recolhida. Não só isso, mas o local pode ser manipulado, que é a inspiração por trás de ponteiros.

Como ler o tamanho de uma variável

Quão grande é um char? Quanto tempo é um tempo? Apenas o dispositivo que você está programando sabe o tamanho de armazenamento exata de variáveis ​​padrão de C.

Como grande é uma variável? usa o operador sizeof para determinar a quantidade de armazenamento de cada tipo de variável de idioma C ocupa na memória.

Quão grande é uma variável?

# include int main () {char c = 'c'-int i = 123-float f = 98.6-double d = 6.022E23-printf("chart%un",sizeof(c))-printf("intt%un",sizeof(i))-printf("floatt%un",sizeof(f))-printf("doublet%un",sizeof(d))-return(0)-}

Exercício 1: Digite o código-fonte do quão grande é uma variável? em seu editor. Criar e executar para ver o tamanho de cada tipo de variável.

Aqui está a saída:

Char 1int 4float 4double 8

A palavra-chave sizeof não é uma função. É mais de um operador. Seu argumento é um nome de variável. O valor que é retornado é do tipo variável de idioma C conhecida como size_t.

A variável é um size_t typedef de outro tipo de variável, como um int não assinado em um PC ou um int não assinado longa em outros sistemas de computador. A linha inferior é que o tamanho indica o número de bytes usados ​​para armazenar essa variável.

As matrizes são também variáveis ​​em C, e sizeof funciona sobre eles.

Quão grande é um array?

#include int () {string de char principal [] = "Será que esta cadeia de tornar-me olhar gordo?" - printf ( "A string "% s ". tem um tamanho de% u n", corda, sizeof (string )) - retorno (0) -}

Exercício 2: Digite o código fonte a partir Como grande é um array? Construir e executá-lo para ver quanto armazenamento da matriz de char ocupa.

Exercício 3: Editar o seu código fonte a partir da Como grande é um array? acrescentando a função strlen () para comparar o seu resultado na matriz com o resultado do operador sizeof.

Se os valores devolvidos por strlen () e sizeof diferentes, você pode explicar a diferença?

Quando você cria uma matriz, o programa aloca espaço na memória para armazenar os valores da matriz. A atribuição baseia-se no tamanho de cada elemento na matriz. Assim, uma matriz de char de 35 itens (incluindo o 0 ou NULL) ocupa 35 bytes de armazenamento, mas o comprimento da corda é ainda apenas 34 caracteres (bytes).

Exercício 4: Editar o código-fonte do Exercício 2, desta vez criando uma matriz int com cinco elementos. A matriz não necessita de ser atribuído qualquer valor, nem precisa de ser exibida. Construir e executar.

Você pode explicar a saída? Se não, reveja a saída do Exercício 1. Tente descobrir o que está acontecendo.

Quão grande é uma estrutura?

#include int main () {struct robô {int nome viva-char [5] posx-INT -INT força ypos-int -} - printf ( "O tamanho mal robot struct é% u n", sizeof (struct robô) ) -Retornar (0) -}

Exercício 5: Inicie um novo projeto usando o código mostrado na Como grande é uma estrutura? Criar e executar para determinar o tamanho da variável estrutura.

O operador sizeof trabalha em todos os tipos de variáveis, mas para uma estrutura, especificar a própria estrutura. Utilizar a palavra-chave struct seguido pelo nome da estrutura, como mostrado na linha 14. Evite o uso de uma variável de estrutura.

O tamanho da estrutura é determinado pela soma do requisito de armazenamento para cada um dos seus elementos. Você pode supor, dada a saída tamanho do Exercício 18-5, que quatro variáveis ​​int mais cinco variáveis ​​de char lhe daria 21: 4 x 4 + 1 x 5. Mas ele não funciona dessa forma.

Aqui está a saída:

O tamanho mal robot struct é 24

A razão que você ver um valor diferente de 21 é que o programa alinha variáveis ​​na memória. Ele não empilhá-los, um após o outro. Que 3 bytes adicionais são preenchidos ao final da matriz nome para mantê-lo alinhado com um deslocamento na memória de 8 bytes.

image0.jpg
  • O operador sizeof retorna o tamanho de uma variável de linguagem C. Ele inclui o tamanho de uma estrutura.

  • Você não pode usar sizeof para determinar o tamanho do seu programa ou o tamanho de qualquer coisa que não seja uma variável.

  • Quando você usar sizeof em uma variável de estrutura, você obter o tamanho dessa variável, que pode ser menor do que o tamanho declarado da estrutura. Um problema pode ocorrer quando se escreve estruturas para um arquivo se você usar o tamanho da variável ao invés de tamanho definido da estrutura.

  • O deslocamento de 8 bytes usado para alinhar variáveis ​​na memória mantém a CPU feliz. O processador é muito mais eficiente na leitura de memória alinhada a esses deslocamentos de 8 bytes.

menu