Explicando a diferença entre (char *) e (char []).

Você já deve ter visto códigos com ambas as declarações abaixo:

char *s1 = "fred";
char s2[] = "fred";

Elas parecem ser equivalentes, mas não são!

A primeira declara um ponteiro que aponta para uma região fixa (constante) da memória. A segunda declaração é um array onde o ponteiro s2 aponta para o primeiro elemento, que é colocado no segmento de dados (não read-only). Eia a prova:

#include <stdio.h>

int main(void)
{
  char *s = "fred";

  s[0] = 'd';
  printf("%s\n", s);

  return 0;
}

O código acima compilará, mas ao ser executado você obterá um segmentation fault. Substitua o *s por s[] e obterá a string “dred”…

Anúncios

2 comentários sobre “Explicando a diferença entre (char *) e (char []).

Deixe um comentário

Faça o login usando um destes métodos para comentar:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s