C ++ algumas perguntas comuns da entrevista --- atualização contínua

1. Qual é a diferença entre declaração de variável e definição

A definição da variável aloca o endereço e espaço de armazenamento para a variável, e a declaração da variável não aloca o endereço. Uma variável pode ser declarada em vários lugares, mas apenas definida em um lugar. Ao mesmo tempo, adicione a declaração da variável extern modificada, indicando que esta variável será definida fora do arquivo ou na parte de trás do arquivo.
Descrição - Muitas vezes, uma variável é apenas declarada que não alocará espaço de memória e não será inicializada até que seja especificamente usada, como variáveis ​​externas.

int main()
{
extern int A;
//这是个声明而不是定义,声明A是一个已经定义了的外部变量
//注意:声明外部变量时可以把变量类型去掉如:extern A;
dosth(); //执行函数
}
int A; //是定义,定义了A为整型的外部变量

2. Descreva resumidamente a função de #ifdef, #else, #endif e ifndef

No programa, você pode usar #ifdef e #endif para definir especialmente o código de um determinado módulo para fornecer essa função a usuários específicos. Os usuários podem bloqueá-los quando não forem necessários.

#ifdef MATH
#include "math.c"
#endif

Ao mesmo tempo, ao lidar com a compilação de hardware na janela, você pode usar esse tipo de compilação para ignorar o hardware e compilar diretamente para obter o resultado esperado.
Observação: embora a instrução if possa ser usada diretamente sem o comando de compilação condicional para atender aos requisitos, o programa de destino é longo e o tempo de execução é longo. Quando a compilação condicional é realizada, as instruções compiladas podem ser reduzidas, reduzindo assim a duração do programa de destino e o tempo de execução .

3. Escreva uma instrução if para comparar int, bool, float, variável de ponteiro e "valor zero"

//int与零值比较
if ( n == 0 )
if ( n != 0 )
//bool与零值比较
if (flag) // 表示flag为真
if (!flag) // 表示flag为假
//float与零值比较
const float EPSINON = 0.00001;
if ((x >= - EPSINON) && (x <= EPSINON) //其中EPSINON是允许的误差(即精度)。
//指针变量与零值比较
if (p == NULL)
if (p != NULL)

4. A estrutura pode ser atribuída diretamente?

Ele pode ser inicializado diretamente quando declarado, e diferentes objetos da mesma estrutura também podem ser atribuídos diretamente.Mas tenha cuidado quando a estrutura contém ponteiro "membros".
Observação - quando há vários ponteiros para a mesma memória, liberar essa memória por um ponteiro pode causar operações ilegais de outros ponteiros. Portanto, você deve garantir que outros ponteiros não usem mais este espaço de memória antes de liberar

5. A diferença entre sizeof e strlen

sizeof é um operador, strlen é
o parâmetro da função de biblioteca sizeof, que pode ser um tipo de dados ou uma variável. E strlen só pode usar uma string terminando com '\ 0' como parâmetro. O
compilador calcula o resultado de sizeof em tempo de compilação, enquanto a função strlen deve ser calculada em tempo de execução, e o tipo de dados calculado por sizeof ocupa o tamanho da memória. E strlen calcula o comprimento real da string
como o parâmetro de sizeof não degenera, e degenera em um ponteiro quando passado para strlen

6. Qual é a diferença entre a palavra-chave estática da linguagem C e a palavra-chave estática do C ++

Em c, a palavra-chave static é usada para modificar variáveis ​​estáticas locais e variáveis ​​e funções estáticas externas. Além das funções acima em C ++, ele também é usado para definir funções e variáveis ​​de membro de classe. Ou seja, membros estáticos e funções de membro estático.
Memória estática de atenção e características globais na programação podem permitir funções chamadas em momentos diferentes para comunicar e transferir informações, enquanto membros estáticos C ++ podem ser executados entre várias instâncias de objeto Comunicação

7. A diferença entre Malloc na linguagem C e nova exclusão em C ++

New e delete são operadores e podem ser sobrecarregados.
Malloc só pode ser usado em C ++ . Free é uma função que pode ser substituída. C e C ++ podem usar
new para chamar o construtor do objeto. O delete correspondente chama o destruidor.
malloc apenas aloca memória, liberta apenas recupera memória e não executa funções de construção e destruidor.
Novos e excluem ponteiros de retorno de um determinado tipo de dados. Malloc e ponteiros vazios de retorno livre.
Observação: o espaço de memória aplicado por malloc deve ser liberado com free. O espaço de memória requerido por novo deve ser liberado com exclusão em vez de misturado

8. Escreva uma macro "padrão" MIN

# d e f i n e m i n ( a , b ) ( ( a ) < = ( b ) ? ( a ) : ( b ) )

9. A diferença entre ++ i e i ++

++ i incrementa 1 e depois retorna
i ++ retorna 1 primeiro e, em seguida, incrementa 1

10. Qual é o papel do volátil

Registros de hardware de dispositivos paralelos, como registradores de status. Uma
variável não automática acessada por uma sub-rotina de serviço de interrupção
. Variáveis ​​compartilhadas por várias tarefas entre várias threads.
Observação: embora volátil seja mais usado em aplicativos embutidos, há mais software no lado do PC. Em threads, variáveis ​​críticas modificadas voláteis também são muito práticas

11. Um parâmetro pode ser constante e volátil

A resposta é sim. Usar const e volatile para modificar a variável ao mesmo tempo significa que essa variável é somente leitura dentro do programa e não pode ser alterada. Ela só pode ser alterada sob alterações fora do programa, e o compilador não otimizará essa variável. Cada vez que você usar esta variável, você deve ter o cuidado de ler o valor desta variável da memória ao invés de ir ao registrador para ler seu backup.
Nota-Devemos prestar atenção ao significado de const aqui. Const apenas não permite que o código no programa altere uma determinada variável. Ele desempenha um papel em tempo de compilação. Na verdade, não proíbe a leitura e gravação de uma determinada seção da memória.

12. Qual é a diferença entre a e & a?

& a significa quando o endereço da variável a
tem significados diferentes em lugares diferentes.
Na instrução de declaração, a apenas mostra que a é uma variável, int a está
em outras instruções, quando não há operando na frente de a e a é um ponteiro, a representa os dados armazenados no endereço apontado pelo ponteiro a, como b = * a

13. Compile um programa de loop infinito com c

while(1)
{ }

Observação-Muitas maneiras podem alcançar a mesma função, mas métodos diferentes têm diferentes ocupações de tempo e espaço, especialmente para leitura e software embarcado, a velocidade do processador é relativamente lenta e o espaço de armazenamento é pequeno, então escolha uma variedade de vantagens de tempo e espaço A primeira consideração do método.

14. Qual é a diferença entre variáveis ​​globais e variáveis ​​locais? Como isso é alcançado? Como o sistema operacional e o compilador sabem?

Todas as variáveis ​​são variáveis ​​que podem ser acessadas por todo o programa. Qualquer pessoa pode acessá-las. A vida útil de todo o programa é do início ao fim - a memória ocupada no final do programa é liberada.
Variáveis ​​locais existem no módulo (sub-rotina, função) e apenas o módulo é localizado. Podem ser acessados, outros módulos não podem ser acessados ​​diretamente. Após a chamada do módulo, as variáveis ​​locais desaparecem e a memória ocupada é liberada. O
sistema operacional e o compilador podem saber a localização da alocação de memória. As variáveis ​​globais são alocadas no segmento de dados global e no programa. Ele é registrado quando é executado e as variáveis ​​locais são alocadas na pilha.

15. Descreva resumidamente a alocação de memória da compilação do programa C e C ++

Alocação da área de armazenamento estático - a memória é alocada quando o programa é compilado e essa memória existe durante todo o período de execução do programa. É rápido e não é fácil cometer erros, porque existe um sistema que irá limpar as consequências. Por exemplo, variáveis ​​globais, variáveis ​​estáticas, strings constantes, etc.
são alocadas na pilha - quando a função é executada, as unidades de armazenamento das variáveis ​​locais na função são criadas na pilha e essas unidades de armazenamento são liberadas automaticamente quando a função é executada.
Alocação na alocação de memória dinâmica em pilha. Quando o programa estiver rodando, use malloc ou new para aplicar para qualquer tamanho de memória, e o programador é responsável por quando usar free e delete para liberar a memória. O tempo de vida da memória dinâmica é determinado pelo programador. Se o espaço for alocado no heap, é de responsabilidade de recuperá-lo, caso contrário, o programa em execução terá um vazamento de memória. A alocação frequente e a liberação de diferentes tamanhos de espaço de heap produzirão fragmentos de heap

Acho que você gosta

Origin blog.51cto.com/13475106/2586629
Recomendado
Clasificación