Ir para conteúdo

Duvida em inicialização de ponteiros


mandelacruz

Posts Recomendados

#include <stdio.h>
#include <stdlib.h>

void main(){
    char *c = "testando"; // Porque aqui é possivel criar um vetor de caracteres na declaração de um ponteiro para char
    int *i = {1,3,5,7,9}; // mas aqui não é possivel criar um vetor de inteiros na declaração de um ponteiro para inteiros?
}

 

Editei pq estava muito confuso da forma que perguntei antes, agora ta mais resumido a dúvida.

Link para o comentário
Compartilhar em outros sites

https://overiq.com/c-programming-101/character-array-and-character-pointer-in-c/

Esse site explica bem o que acontece fazendo:

    char *p = "testando"; 
    char P[] = "testando";

O que na minha cabeça deveria ser a mesma coisa para:

    int *i = {1,3,5,7,8};
    int I[] = {1,3,5,7,9};

Mas nao funciona da mesma forma, então estou procurando saber o porque, mas não encontro em canto algum.

Link para o comentário
Compartilhar em outros sites

Oi. Se eu nao me engano eh por regra da linguagem. Primeiro eh bom notar que um ponteiro NAO eh um array, e um array NAO eh um ponteiro.

Se nao estou enganado, {1, 2, 3} nao eh exatamente um  array de inteiros, mas sim uma lista de inicializadores. Isso pode ser usado para inicializar um array de inteiros, mas nao um ponteiro, por exemplo:

int a[] = {1, 2, 3};  Por baixo dos panos, isso esta na verdade:

  1. Reservando um espaco de sizeof(int) * 3 na stack
  2. Colocando cada valor em a[0]...a[2] indivudualmente. Por ex:  a[0]=1; a[1]=2...

Para voce fazer algo semelhante ao que vc quer fazer, vc pode usar compound literals.

int *a = (int []){1,2,3};

Neste trexo vc esta criando uma lista anonima de inteiros, e depois designando um ponteiro para a primeira posicao dessa lista, atravez do array decay.

 

Acho que usei alguns termos mais avancados nessa explicacao, mas o que eu estou tentando dizer eh: Isso nao eh possivel pois eh regra da linguagem!

Espero ter ajudado!

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...