Como operadores de endereço trabalhar em c ++

Como diz o ditado, “Todo mundo tem que estar em algum lugar.” Variável Cada C ++ é armazenado em algum lugar na memória do computador. A memória é dividida em bytes individuais, com cada byte transportar o seu próprio endereço numeradas de 0, 1, 2, e assim por diante.

Uma variável intReader pode ser no endereço 0x100, enquanto floatReader pode ser mais no local 0x180. (Por convenção, endereços de memória são expressos em hexadecimal.) Claro, intReader e floatReader pode estar em outro lugar na memória inteiramente - apenas o computador sabe ao certo e só no momento em que o programa é executado.

Isso é um pouco semelhante a um hotel. Quando você fizer sua reserva, você pode ser atribuído quarto 0x100. Seu amigo pode ser atribuído 80 portas para baixo na sala de 0x180. Cada variável é atribuído um endereço quando ele é criado.

Os dois operadores-ponteiro relacionados são mostrados nesta tabela. o & operador diz “diga-me o seu endereço de” e * diz que “o valor no seguinte endereço.”

Operadores de ponteiro
OperadorSignificado
& (Unária)(Em uma expressão) do endereço de
& (Unária)(Em uma declaração) para referência
* (Unária)(Em uma expressão) a coisa apontada pela
* (Unária)(Em uma declaração) ponteiro para

Estes não devem ser confundidos com o binário & e * operadores.

Video: 08 IDEIAS PARA TRABALHAR EM CASA Pela Internet | Como Trabalhar Em Casa | Alex Vargas

Os seguintes traçado programa demonstra como o & operador pode ser usado para exibir o layout de variáveis ​​na memória:

// Layout - este programa tenta dar ao leitor // uma idéia do layout // memória local em seus compilador # incluem #incluir #incluir usando domínio principal (int nNumberofArgs, char * pszArgs []) {int iniciar-intn- longl- longo longo LL-F- flutuador duplo d- longo dupla extremidade ld-int std-int - // saída definido para modecout.setf hex (ios :: hex) -cout.unsetf (ios :: DEC) - // saída o endereço de cada // variável, a fim de ter uma idéia de como as variáveis ​​são // dispostos em memorycout lt; lt; "--- = " lt; lt; &começar lt; lt; endl-cout lt; lt; "&n = " lt; lt; &n lt; lt; endl-cout lt; lt; "&l = " lt; lt; &eu lt; lt; endl-cout lt; lt; "&ll = " lt; lt; &LLLT; lt; endl-cout lt; lt; "&f = " lt; lt; &f lt; lt; endl-cout lt; lt; "&d = " lt; lt; &d lt; lt; endl-cout lt; lt; "&ld = " lt; lt; &LDLT; lt; endl-cout lt; lt; "--- = " lt; lt; &fim lt; lt; endl - // espera até que o usuário está pronto antes de terminar o programa // para permitir que o usuário veja o resultscout programa lt; lt; "Pressione Enter para continuar ..." lt; lt; endl-cin.ignore (10, `n`) - cin.get () - 0-} retornar


O programa declara um conjunto de variáveis ​​de diferentes tipos. Em seguida, aplica o & operador a cada um a descobrir o seu endereço. Os resultados de uma execução deste programa com o Code :: Blocks aparecer da seguinte forma:

--- = 0x28fefc&n = 0x28fef8&l = 0x28fef4&ll = 0x28fee8&f = 0x28fee4&d = 0x28fed8&ld = 0x28fec0 --- = 0x28febcPress Enter para continuar ...

Seus resultados podem variar. O endereço absoluto de variáveis ​​do programa depende de uma série de fatores. O padrão C ++ certamente não especifica como as variáveis ​​devem ser definidos na memória.

Video: Curso C++ - Aula 24 - Operadores Lógicos

Observe como a variável n é exatamente 4 bytes da primeira variável declarada (começar), o que corresponde ao tamanho de um int (4 bytes). Da mesma forma, a variável eu aparece 4 bytes para baixo a partir desse, que é também o tamanho de um longo.

No entanto, o flutuador variável f é um total de 12 bytes a partir do seu vizinho variável d (0x28fee4 - 0x28fed8 = 0x000c). Isso é muito mais do que os 4 bytes necessários para uma flutuador.

Não há nenhuma exigência de que o C ++ variáveis ​​compilador bloco na memória sem espaços entre eles. Na verdade, muitas vezes você vê essas lacunas na memória quando a mistura de variáveis ​​de tamanho diferente.

O Code :: Blocks / compilador gcc poderia estar armazenando variáveis ​​para seu próprio uso entre suas variáveis. Ou, mais provavelmente, uma peculiaridade na forma como as variáveis ​​estão sendo definidos na memória está a causar o compilador a perder uma pequena quantidade de espaço.


Publicações relacionadas