• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Tomás Mendes

Ponteiro para NULL é o mesmo que 0 ?

3 mensagens neste tópico

Boa noite,

Tenho um teste na quarta-feira, estou a fazer uns testes e aparece-me isto:

void print()
{
  struct item *px = first;
  while(px) {
    printf("%c", px->value);
    px = px->next;
  }
  printf("\n");
}

Isso é uma função que imprime uma lista de caracteres (pelo menos é o que parece ser). Esse ciclo while para quando px for falso, ou seja quando px apontar para 0. Sabe-se que o no último elemento, o campo next é NULL. Então a conclusão a que posso chegar é que NULL é representado pelo valor 0.

Estou a pensar bem?

Tomás

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Yep

"Null is a special pointer value (or other kind of object reference) used to signify that a pointer intentionally does not point to (or refer to) an object. Such a pointer is called a null pointer.[1] Many implementations use a value of 0 (all bits zero) to represent the null pointer, as this is at the bottom of the address space of most CPUs" - http://en.wikipedia.org/wiki/Null_(computer_programming)

e ainda:

"In C and C++ programming, two null pointers are guaranteed to compare equal; ANSI C guarantees that any null pointer will be equal to 0 in a comparison with an integer type; furthermore the macro NULL is defined as a null pointer constant, that is value 0" - http://en.wikipedia.org/wiki/Pointer#The_null_pointer

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Humm... obrigado pela confirmação.

Agora ia fazer uma pergunta mas entretanto cheguei à resposta (mas deixo aqui a pergunta e a resposta pode ser que seja útil para alguém):

Se "the macro NULL is defined as a null pointer constant, that is value 0", significa que algures existe algo assim "#define NULL 0" mas, o ponteiro pode não apontar para um inteiro. Como é que funcionaria neste caso?

Resposta: apesar de o ponteiro puder ou não apontar para um inteiro, um ponteiro é sempre um endereço, ou seja é sempre um valor númerico. Isto significa que mesmo que aponte para uma instância de uma qualquer estrutura, o valor do ponteiro vai ser numérico, ou seja, pode sempre ser igualado a zero.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora