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.
Conteúdo
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.”
Operador | Significado |
---|---|
& (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.