Jump to content

Ponteiro para NULL é o mesmo que 0 ?


Recommended Posts

Posted

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

Posted

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

Não respondo a dúvidas por mensagem.

Posted

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.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.