Keresés

Új hozzászólás Aktív témák

  • mgoogyi

    senior tag

    válasz Jhonny06 #694 üzenetére

    Egyrészt ezt így próbáld ki, nekem így simán működik:

    #include <stdio.h>
    #include <iostream>
    #include <fstream>
    #include <string>

    using namespace std;

    struct example
    {
    int day;
    string name;
    };

    typedef example array[5];

    int load(int& counter, array something);
    int write(array something);

    int main()
    {
    int counter;
    array something;
    load(counter, something);
    write(something);

    getc(stdin);
    return 0;
    }

    int load(int& counter, array something)
    {
    ifstream file;
    file.open("file.txt");
    file >> counter; //<- #2 PROBLEM
    for(int i=0; i<counter; i++)
    {
    file >> something.day;
    file >> something(i).name;
    cout << something(i).day << " " << something(i).name << endl;
    }
    file.close();
    return 0;
    }

    int write(array something)
    {
    int one=1;
    if(something[one].day)
    cout << something[one].name; //<- #1 PROBLEM
    /*else
    continue;*/
    return 0;
    }

    Referencia, cím, stb:

    ha van egy tömböd, pl. int tomb[5];
    akkor ha csak simán ezt írod le, hogy pl(sorry a c-s kiíratásért, én azt szeretem):
    printf("%d",tomb); -> a tömb memóriacíme
    tomb[0] -> a tomb memóriacíménél lévő int elem
    tomb[1] -> a tomb címéhez képest egy inttel arrébb lévő elem
    tomb[2] -> a tomb címéhez képest két inttel arrébb lévő elem

    tomb + 0 -> a tomb első elemének, avagy a tömbnek a memóriacíme
    tomb + 1 -> a tomb második elemének a címe

    *(tomb + 0) -> a * rámutat a zárójelben lévő címre, azaz az ottani int értéket jelenti

    az és(&) jel több dologra jó, most kettőre térek ki:

    1. Cím lekérése
    van egy ilyen változód, hogy:
    int i = 5;
    &i ennek az i változónak a címét jelenti a memóriában.
    Ha pointerezel: *(&i) az i címére mutató pointer, tehát maga az i.

    2. Referencia (nem tudom milyen nyelvekben vagy jártas, pascalban pl. ez a var kulcsszó, ill. sok nyelvben meg mindig referencia szerinti átadás van, mint pl. java - persze vannak kivételek:))

    int i = 5;
    int & j = i; // az i "álneve" vagy "aliasa" j lesz

    itt a j egy és ugyanaz a változó, mint az i, tehát ha ezt csinálod, hogy
    j = 6;
    akkor az i is 6 lesz, mivel a két változó ugyanaz, csak két különböző néven tudod őket elérni.

    ha van egy függvény, ami referenciát vár, pl:

    void inc (int & j) {
    j++;
    }

    int i = 5;
    inc (i);

    akkor ennek a függvénynek a paramétere egy alias lesz i-re, tehát ha a függvényben megváltoztatod j-t, azzal i-t változtatod. Szal a referencia arra van általában, hogy a bemeneti paraméter kimeneti is lehessen ill. még azért használják, mert ez egy dereferált pointer a beadott paraméterre és ha az a paraméter nagyobb helyet foglal, mint egy pointer, akkor nem kell lemásolni a beadott értéket az újonnan létrehozott ugyanolyan nagy paraméterváltozóba. Ha az utóbbi félmondatot még nem érted, nem nagy gond.

    Szóval te egy függvénynek átadtad referenciaként egy tömb címét. Ezt a címet te nyilván nem akarod megváltoztatni, mert akkor a memóriában ki tudja honnan olvasnál be dolgokat.
    Kíváncsi vagyok, hogy ebből mit értettél meg... :DDD

Új hozzászólás Aktív témák