2 votes

quelle est la différence entre les variables statiques et normales en c++ ?

J'ai besoin de connaître la différence, je suis débutant.

10voto

edz007 Points 79
void func()
{
    static int static_var=1;
    int non_static_var=1;

    static_var++;
    non_static_var++;

    cout<<"Static="<<static_var;
    cout<<"NonStatic="<<non_static_var;
}

void main()
{
    clrscr();
    int i;
    for (i=0;i<5;i++)
    {
        func();
    }
    getch();
}

Le résultat ci-dessus est le suivant :

Static=2
Nonstatic=2

Static=3
Nonstatic=2

Static=4
Nonstatic=2

Static=5
Nonstatic=2

Static=6
Nonstatic=2

Les variables statiques conservent leur valeur tandis que les variables non statiques ou dynamiques sont initialisées à '1' chaque fois que la fonction est appelée. J'espère que cela vous aidera.

4voto

Ted Hopp Points 122617

Une variable statique est un emplacement mémoire unique associé à la classe.

Une variable non statique (qui est un membre d'une classe) représente un emplacement mémoire différent pour chaque instance de la classe.

Les variables statiques ne peuvent être initialisées qu'une seule fois et sont affectées à 0 lors de la création d'un objet.

3voto

Nawaz Points 148870
  • static ont un lien interne, tandis que les variables qui n'ont pas la portée d'un espace de nom ont un lien interne. static les variables de l'espace de nom ont un lien externe par défaut ! Détails : a const La variable de l'espace de nom a un lien interne par défaut. Ce lien peut être modifié par le mot-clé extern .
  • static dans une classe est associée à la classe, ce qui signifie que toutes les instances de la classe ont les mêmes instances de variables statiques ; elles sont comme des variables globales que chaque instance de la classe peut utiliser. même a accès.
  • non static dans une classe sont des membres d'instance, c'est-à-dire que chaque instance de la classe aura ses propres instances de la variable non static variables.
  • a static Une donnée membre d'une classe a un lien externe si le nom de la classe a un lien externe. [$3.5/5]
  • a static dans une fonction conserve sa valeur même après le retour de la fonction. En d'autres termes, sa durée de vie est égale à celle du programme lui-même. Ceci est démontré dans La réponse de Mahesh .

2voto

PPatel Points 21

La principale différence entre les variables statiques et normales réside dans leur durée de vie. Par exemple, la portée et la durée de vie d'une variable locale se situent dans la boucle de fonction dans laquelle elle est déclarée, alors que la portée d'une variable statique est la même que celle d'une variable locale, ce qui signifie qu'elle sera accessible dans la fonction dans laquelle elle est déclarée (si elle n'est pas définie globalement), mais sa durée de vie s'étend sur tout le programme. Ainsi, l'allocation de mémoire dépend de la durée de vie, de sorte que la variable statique ne mourra pas jusqu'à ce que le programme se termine, donc aucune nouvelle mémoire n'est allouée, donc une adresse mémoire fixe est allouée aux variables statiques et la valeur de cette adresse sera écrasée chaque fois que nous changeons la valeur de la variable, alors que pour une variable normale, dès que vous sortez de la portée, la variable mourra (ce qui signifie que la mémoire sera libérée pour cette variable) et lorsque vous définirez à nouveau la variable, une nouvelle adresse mémoire sera attribuée, la nouvelle valeur sera stockée dans l'adresse et il n'y aura pas de concept d'écrasement (lorsque nous sortons de la portée).

1voto

Mahesh Points 20994

Les variables statiques conservent leur valeur pendant les appels de fonction/boucles, mais pas les variables locales ;

#include <iostream>

void foo()
{
    for( int i=0; i<5; ++i )
    {
         static int staticVariable = 0;
         int local = 0;

         ++local;
         ++staticVariable;

         cout << local << "\t" << staticVariable << "\n";
    }
}

int main()
{
    foo();
    return 0;
}

Résultats :

1 1
1 2
1 3
1 4
1 5

Lorsqu'une variable statique est un membre d'une classe, chaque instance partage la variable statique. Chaque instance n'a pas sa propre copie.

class foo
{
     public:
     static int staticVariable;
};

int foo::staticVariable = 0;

foo obj1, obj2 ; // Both the instances share the static variable.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X