Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 17 von 17
  1. #11
    CIH-Virus Avatar von -[RiDER]-
    Registriert seit
    05.01.2007
    Beiträge
    496

    Standard

    Hi
    Zitat Zitat von Darkthief
    also, ersma kann man keine const Variable deklarieren ohne sie zu initialisieren, es sei denn, sie ist extern.
    Und ja, extern bzw. globale Variablen werden immer mit 0 initialisiert, auch Felder (habs getestet).
    Ich glaube, dass Du hier extern, const, static und globale Variablen in einen Topf wirfst.

    extern hat was mit modularer Programmierung zu tun, ist also für diesen Thread weitestgehend uninteressant.

    Variablen, die als const deklariert sind, lassen sich nicht ändern, zumindest sollte das Dein Compiler nicht zulassen.

    Variablen, die innerhalb einer Funktion als static deklariert sind, bleiben nach Verlassen ihres Gültigkeitsbereichs erhalten und haben bei erneutem Aufruf (im gleichen Gültigkeitsbereich) noch ihren alten Wert, wurden also nicht gelöscht.

    Es gibt noch sowas wie volatile oder restrict, was aber hierfür keine Bedeutung hat.

    Globale Variablen sind Variablen, deren Gültigkeitsbereich sich über das gesamte Programm erstreckt (bei modularer Programmierung kommen noch ein Paar Umstände hinzu, doch das hat wie gesagt nichts mit dem Topic zu tun...).

    Wenn Du Variablen eines Vektor mit Zufallswerten füllen willst, dann tu das mit rand().
    Code:
    int mat[50][50];
    int i, j;
    
    srand(time(NULL)); // rand() initialisieren
    
    for(i = 0; i < 50; i++)
    {
      for(j = 0; j < 50; j++)
      {
        mat[i][j] = (int)(INT_MAX * rand() / (RAND_MAX + 1));
        // Wert zwischen 0 und INT_MAX
      }
    }
    GreetZ RiDER

  2. #12
    has one Avatar von noctem
    Registriert seit
    08.06.2008
    Beiträge
    392

    Standard

    Nun bin ich etwas verwirrt:
    Code:
     15:12:21 noctem@lappi $ ./test
    Normales i: 134515113
    Statisches i: 0
    Globales i: 0
     15:12:25 noctem@lappi $ ./test
    Normales i: 134515113
    Statisches i: 0
    Globales i: 0
     15:12:26 noctem@lappi $ ./test
    Normales i: 134515113
    Statisches i: 0
    Globales i: 0
     15:12:27 noctem@lappi $ ./test
    Normales i: 134515113
    Statisches i: 0
    Globales i: 0
     15:12:27 noctem@lappi $ ./test
    Normales i: 134515113
    Statisches i: 0
    Globales i: 0
     15:12:28 noctem@lappi $ ./test
    Normales i: 134515113
    Statisches i: 0
    Globales i: 0
    << Immer das gleiche. o.O

    Code:
    Code:
    #include <iostream>
    using namespace std;
    
    int global_i;
    
    int main()
    { 
    static int static_i;
    int normal_i;
    
    cout << "Normales i: " << normal_i << endl; 
    cout << "Statisches i: " << static_i << endl;
    cout << "Globales i: " << global_i << endl;
    }
    noctem{aet}jabber.ccc.de

  3. #13
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard

    Zitat Zitat von -[RiDER
    -]Ich bin mir nicht ganz sicher und habs jetzt auch nicht ausprobiert, aber mich dünkt, dass das nur auf statische und globale Variablen zutrifft.
    Wäre möglich - ich habe bisjetzt die Erfahrung gemacht, dass ein Boolean, ohne Initialisierung, immer falsch war...
    Ich schau es mir nochmal an


    mfG. BlackBerry

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

  4. #14
    DateMake Dialer
    Registriert seit
    10.10.2008
    Beiträge
    99

    Standard

    sind const variablen nicht static variablen?
    naja und mit extern meinte ich auserhalb von main deklarierte variablen, die werden mit 0 initialisiert
    konstante variablen muss man ja initialisieren, also werden sie halt so initialisiert, wei man sie initialisiert.
    und da ich dachte, das man const variablen nicht mehr verändern kann, wollte ich wissen, warum hier iimmer ien anderer wert initialisiert werden kann:
    #include <iostream>
    #include <math.h>
    using namespace std;

    int main() {
    int mat[50][50];

    int max = mat[0][0], min = max;

    for (int i = 0; i < 50 ; i++)
    for (int j = 0; j < 50 ; j++)
    {
    int aij = mat[i][j];

    cout <<aij <<endl; //Diese Zeile habe ich eingefügt um die Zwischenwerte zu sehen.

    if (aij > max)
    max = aij;
    else if (aij < min)
    min = aij;
    }
    cout << "\nMin:"<< min <<"\nMax:" <<max <<endl;
    return 0;

    ist der wertigkeits bereich einer in einer schleife definierten variable nur in der schleife?
    das würds nämich erklären.

    und bei einer matrix mit bool werten krieg ich immer random werte, aber auch größere als 1. ich achte bool kann nur 0 oder 1 enthalten?

  5. #15
    CIH-Virus Avatar von -[RiDER]-
    Registriert seit
    05.01.2007
    Beiträge
    496

    Standard

    Hi
    Zitat Zitat von Darkthief
    ist der wertigkeits bereich
    Du sprichst vom Gültigkeitsbereich?
    Oder Wertebereich?
    Ein Zwischending, wie Du es verwendest, gibt es nicht.
    Zitat Zitat von Darkthief
    einer in einer schleife definierten variable nur in der schleife?
    das würds nämich erklären.
    Ja, das stimmt, ist für Deinen Kode aber ohne Bedeutung.
    Und was würde das erklären?

    Ich verstehe nicht, wieso Du diesen Kode in Zusammenhang mit "const Variablen" postest - ich sehe dort keine solche Variable!

    Wenn Du mit Deinem Programm eine Matrix mit zufälligen Werten füllen willst, dann fehlt Deinem Kode eine entscheidende Sache: das Füllen der Matrix mit zufälligen Werten!

    Um auch gleich die Frage mit der Initialisierung zu klären, 6.7.8p10:
    If an object that has automatic storage duration is not initialized explicitly, its value is
    indeterminate. If an object that has static storage duration is not initialized explicitly,
    then:
    — if it has pointer type, it is initialized to a null pointer;
    — if it has arithmetic type, it is initialized to (positive or unsigned) zero;
    — if it is an aggregate, every member is initialized (recursively) according to these rules;
    — if it is a union, the first named member is initialized (recursively) according to these
    rules.
    Die Variablen Deiner Matrix gehören zum im ersten Satz beschriebenen Variablen: Ihr Wert ist unbestimmt!
    Das ist etwas anderes als zufällig!

    Wenn irgendwas an Deinem Programm nicht funktioniert, dann würde ich das darauf zurückführen!

    Zitat Zitat von Darkthief
    und bei einer matrix mit bool werten krieg ich immer random werte, aber auch größere als 1. ich achte bool kann nur 0 oder 1 enthalten?
    6.2.5p5 besagt:
    An object declared as type _Bool is large enough to store the values 0 and 1.
    Das ist alles, was der Standard dazu vorschreibt.
    _Bool kann also (implementierungsbedingt) auch andere Werte als 0 und 1 haben - nur diese beiden müssen auf jeden Fall dabei sein.

    GreetZ RiDER

  6. #16
    DateMake Dialer
    Registriert seit
    10.10.2008
    Beiträge
    99

    Standard

    ok sry hab die const variable vergessen.
    ja ich meinte den gültigkeitsbereich.
    und nien ich wil keine matrix mit zufälligen werten fülle, sondern habe mich gewundert, warum zufällige werte in einer matrix erscheinen, wenn sie nicht initialisiert wird, aner jetzt weis ichs ja.

    und bei dem code hat einfach das "const" vor dem "int aij = mat[i][j];" gefehlt.
    also soweit ich das verstanen habe, sind in einer schleife deklarierte variablen nur in dieser gültig.

  7. #17
    CIH-Virus Avatar von -[RiDER]-
    Registriert seit
    05.01.2007
    Beiträge
    496

    Standard

    Hi
    Zitat Zitat von Darkthief
    und nien ich wil keine matrix mit zufälligen werten fülle, sondern habe mich gewundert, warum zufällige werte in einer matrix erscheinen, wenn sie nicht initialisiert wird
    Achso.

    Zitat Zitat von Darkthief
    also soweit ich das verstanen habe, sind in einer schleife deklarierte variablen nur in dieser gültig.
    Das hast Du richtig verstanden.
    Das gilt übrigens nicht nur für for-Schleifen, sondern für jede Art von Block.

    In C++ ist AFAIK auch eine Schreibweise wie man sie z.B. von Perl auch kennt möglich:
    Code:
    for(int foo = bar; foo < foobar; foo++)
    Streng genommen ist hierbei foo außerhalb der Schleife deklariert (um ganz genau zu sein: definiert), die Variable verliert ihre Wertigkeit aber beim Verlassen der Schleife.

    Dann gibts noch sowas wie den Spezifizierer auto und eine kleine Ausnahme für Vektoren variabler Länge, aber das sind sehr seltene Ausnahmen...

    GreetZ RiDER

Seite 2 von 2 ErsteErste 12

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •