C++ beginners vraag

  • Onderwerp starter Onderwerp starter pMzQ
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

pMzQ

Nieuwe gebruiker
Lid geworden
5 okt 2008
Berichten
3
Beste C++ programmeurs,

Ik ben onlangs begonnen met het proberen te doorgronden van C++.

Ik heb namelijk de source code van een online game gedwonload die ik wil gaan hosten.

Ik heb de game al draaiend echter wil ik het een en ander aanpassen.

Ik heb zelf wat PHP ervaring echter die pointers uit C++ kon ik nog niet.

Bij het gedownloade spel zitten een antal files ik zal even 1 module uitlichten zodat ik misschein wat meer inzicht krijg hoe het in zijn werk gaat.


Code:
typedef struct rc_class_struct {
  unsigned int id;
  unsigned int block_id;
  unsigned int rc_id;
  unsigned int next_id;
  unsigned int next_alt_id;
  unsigned int type;
  char * name;
} rc_class;


rc_class **get_rc_class (MYSQL *mysql)
{
  MYSQL_RES *res;
  MYSQL_ROW row;
  
  int num, high_id = 0, i;
  rc_class **ret = NULL;
  rc_class *rcc = NULL, *rc_class_ptr;

  debug (1, "get_rc_class");

  res = do_query (mysql,"SELECT id, block_id, rc_id, name, type " \
		  "FROM rc_class ORDER by id ASC");

  if (res && (num = mysql_num_rows(res))) {
    rcc = calloc (sizeof(rc_class), num+1);
    assert (rcc);

    rc_class_ptr = rcc;
    while ((row = mysql_fetch_row (res)) ) {
      rc_class_ptr->id = atoi(row[0]);
      rc_class_ptr->block_id = atoi(row[1]);
      rc_class_ptr->rc_id = atoi(row[2]);
      rc_class_ptr->name = strdup (row[3]);
      rc_class_ptr->type = atoi(row[4]);

      if (rc_class_ptr->id > high_id) 
	high_id = rc_class_ptr->id;
      rc_class_ptr++;
    }

    rc_class_ptr->id = 0;

    check_error (mysql);
    mysql_free_result(res);

    /* 
     * fprintf (logfile, "Found high_id=%d\n",high_id);
     */

    ret = calloc (sizeof(rc_class *), high_id+1);
    assert (ret);
    for (i=0; i<num; i++) {
      /*
       * fprintf (logfile, "Assigning %d -> [%d]\n",i, (rcc+i)->id);
       */
      ret[(rcc+i)->id] = rcc+i;
    }
    for (i=0; i<num; i++) {
      /* 
       * fprintf (logfile, "Reverse %d -> %d : %d\n",
       *       i,  (rcc+i)->rc_id, (rcc+i)->id);
       */
      if ( (rcc+i)->rc_id && ret[(rcc+i)->rc_id]) {
        if ( ret[(rcc+i)->rc_id]->next_id != 0 )
          ret[(rcc+i)->rc_id]->next_alt_id = (rcc+i)->id;
        else
          ret[(rcc+i)->rc_id]->next_id = (rcc+i)->id;
      } 
/*
      if ( (rcc+i)->rc_id && ret[(rcc+i)->rc_id])
	ret[(rcc+i)->rc_id]->next_id = (rcc+i)->id;
*/
    }
  }

  return ret;
}

Wat ik hier bijvoorbeeld niet helemaal snap is:

Code:
  int num, high_id = 0, i;

Waar staat die "i" voor ? is dit 0 want ik ken de expressies i++ wel enzo voor loops maar i heeft hiervoor ook geen waarde toegekend gekregen ofzo ?

Daarnaast snap ik ook niet precies het volgende:

Code:
rc_class **get_rc_class (MYSQL *mysql)

waarom staat hiervoor ook die rc_class en waarom worden er 2 asterixen (**) gebruik en niet 1 (*) voor een pointer ?

Ik hoop dat jullie me er verder mee kunnen helpen!

Alvast bedankt!
pMzQ,
 
Code:
 int num, high_id = 0, i;
is hetzelfde als
Code:
 int num, i, high_id = 0;

Dwz num, i en high_id zijn alledrie integers waarbij high_id meteen een initiele waarde nul krijgt.

Code:
 rc_class **ret = NULL;
Het type van ret is een pointer naar een pointer naar rc_class met als initiele waarde de NULL-Pointer.

Overigens lijkt me de stijl van je programmafragment niet zo modern met zijn struct en typedef. Er had moderner een classedefinitie kunnen staan.
i had ook beter lokaal gedefinieeerd kunnen worden: for ( int i = 0, .......)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan