Ponteiros

63 views
Skip to first unread message

Uilson Claudio

unread,
May 18, 2018, 11:58:19 AM5/18/18
to ccppbrasil
Galera como já disse no post anterior, estou começando a aprender C e gostaria de tirar uma duvida em relação a ponteiros, por exemplo:
Uma função de ordenação eu posso fazer sem ponteiros. Qual a finalidade de usar ponteiros nessa função se posso faze-la da mesma forma sem ponteiros ?
Pesquisando na internet verifiquei que sempre usa se ponteiros para esses tipos de funções, mas pq, se eu consigo fazer las sem ponteiros ?

Obrigado

Tássio Naia

unread,
May 18, 2018, 1:19:06 PM5/18/18
to ccppb...@googlegroups.com
Aqui vai uma ideia.

Se você está ordenando um array a[..] do tipo t,
vai precisar trocar elementos de posição.

Para isso você provavelmente usa uma variável auxiliar aux.

Se não for usar ponteiros, trocar os elementos a[i] e a[j] de posição seria algo tipo

aux = a[i];
a[i] = a[j];
a[j] = a[i];

Ou seja, você copia valores do tipo t três vezes.

Se t for uma struct, isso pode significar cópia de muito dado
(imagine, por exemplo, que a[i] é um clip de filme, ou um "objeto"
bastante complicado), quando você faz essa operação usando ponteiros,
precisa copiar três ponteiros--e ponteiros, em C, não são muito grandes.

Alguém mais experiente conhece outras razões?

Até,
Tássio

angelo

unread,
May 18, 2018, 2:38:10 PM5/18/18
to ccppb...@googlegroups.com
Toma ai um exemplo, que achei na internet uma apostila de C++ bem didatico


Eu ainda compilei dois dos exemplos, desse modulo 09,  tá de acordo




--
Antes de enviar um e-mail para o grupo leia:
http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~------------------------------
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-unsubscribe@googlegroups.com
Para mais opções, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~------------

Message has been deleted

Talisson Bento

unread,
May 19, 2018, 9:29:50 AM5/19/18
to ccppbrasil
Bom dia, talvez não seja claro ordenar tipo de dados literais (int, float, double e etc.), seja por ponteiros, referencia ou valor.
Mas imagine que tenha uma classe GameObject

constexpr int MAX_COMPONENTS = 32;
class GameObject
{
  private:
  unsigned int id;
  float x,y;
  Component components[MAX_COMPONENTS];
  char name[40];

  //metodos...
};

// outros códigos aqui

GameObjects gameobjects[10];


agora suponhamos que essa classe tenha o Tamanho = sizeof(GameObject) = 120 bytes,  e para gameobjects temos 10 * 120 = 1200 bytes.
sabendo que um ponteiro armazena somente endereço de memória, veja que se sua máquina for de 32 bits qualquer  tipo de ponteiro será  de Tamanho = sizeof(void*) = 4 bytes  ou 8 bytes para 64 bits.

void foo(GameObject go);
void bar(GameObject* go);

void main()
{
  GameObject player;
  foo(player);
  bar(&player);
}

quando foo() é chamado, um  outro objeto temporário é criado para go ser utilizado na função (um overload de 120 bytes) e a funçāo bar() passa somente o endereço de onde o objeto está alocado (passa 4 bytes ou 8 bytes, para 32 bits e 64bits respectivamente). nesse cenário fica claro que utilizar ponteiro traz um grande ganho.

espero ter ajudado.

Reply all
Reply to author
Forward
0 new messages