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.
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.