Maison  >  Article  >  développement back-end  >  Les variables portant le même nom peuvent-elles être utilisées dans différentes fonctions ?

Les variables portant le même nom peuvent-elles être utilisées dans différentes fonctions ?

青灯夜游
青灯夜游original
2021-01-28 16:11:2424045parcourir

peut être utilisé. Les variables décrites dans la fonction en langage C sont des variables locales, qui ne fonctionnent qu'au sein de la fonction et n'affecteront pas les autres fonctions. Utiliser le même nom de variable dans différentes fonctions ne signifie pas qu’il s’agit de la même variable.

Les variables portant le même nom peuvent-elles être utilisées dans différentes fonctions ?

L'environnement d'exploitation de ce tutoriel : système Windows 7, version c99, ordinateur Dell G3.

Les variables portant le même nom peuvent être utilisées dans différentes fonctions.

Recommandation du tutoriel : "Vidéo du tutoriel en langage C"

Variables (variables locales) définies à l'intérieur de la fonction

Une variable définie à l'intérieur d'une fonction a sa portée limitée à l'intérieur de la fonction et ne peut pas être utilisée en dehors de la fonction. Nous appelons une telle variable une variable locale. Les paramètres formels d'une fonction sont également des variables locales et ne peuvent être utilisés qu'à l'intérieur de la fonction.

int f1(int a){
    int b,c;  //a,b,c仅在函数f1()内有效
    return a+b+c;
}
int main(){
    int m,n;  //m,n仅在函数main()内有效
    return 0;
}

Quelques notes :

1) Les variables définies dans la fonction principale sont également des variables locales et ne peuvent être utilisées qu'en même temps, la fonction principale ne peut pas utiliser le ; variables définies dans d’autres fonctions. La fonction principale est également une fonction et a un statut égal à celui des autres fonctions.

2) Les variables de paramètres formels et les variables définies dans le corps de la fonction sont toutes des variables locales. Le processus de transfert de valeurs des paramètres réels vers les paramètres formels est également le processus d'attribution de valeurs aux variables locales.

3) Vous pouvez utiliser le même nom de variable dans différentes fonctions. Elles représentent des données différentes et allouent une mémoire différente sans interférer les unes avec les autres ni provoquer de confusion.

4) Les variables peuvent également être définies dans des blocs d'instructions, et leur portée est limitée au bloc d'instructions actuel.

À propos de la dénomination des variables

Chaque morceau de code exécutable en langage C contient plusieurs portées, même le code en langage C le plus simple.

int main(){
    return 0;
}

Il s'agit du code de langage C le plus simple et exécutable. Il contient deux portées, l'une est la portée locale à l'intérieur de la fonction main() et l'autre est la portée globale en dehors du domaine main().

Le langage C stipule que deux variables portant le même nom ne peuvent pas apparaître dans la même portée, sinon un conflit de nom se produira. Cependant, les variables portant le même nom sont autorisées à apparaître dans des portées différentes et leurs portées sont différentes ; et ne seront pas en conflit les uns avec les autres. Cette phrase a deux significations :

  • Les variables portant le même nom peuvent apparaître dans différentes fonctions, et différentes fonctions ont des portées locales différentes

  • Variables ; avec le même nom peut apparaître à l'intérieur et à l'extérieur de la fonction. La portée locale est à l'intérieur de la fonction et la portée globale est à l'extérieur de la fonction.

1) Les variables portant le même nom dans des fonctions différentes sont deux variables complètement indépendantes. Elles n'ont aucune corrélation ni influence l'une sur l'autre.

#include <stdio.h>

void func_a(){
    int n = 100;
    printf("func_a: n = %d\n", n);
    n = 86;
    printf("func_a: n = %d\n", n);
}

void func_b(){
    int n = 29;
    printf("func_b: n = %d\n", n);
    func_a(); //调用func_a()
    printf("func_b: n = %d\n", n);
}

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

Résultats de fonctionnement :

func_b: n = 29
func_a: n = 100
func_a: n = 86
func_b: n = 29

func_a() et func_b() définissent une variable n en interne dans func_b(), la valeur initiale de n est 29. Après avoir appelé func_a() , la valeur n est toujours 29, ce qui montre que le n à l'intérieur de func_b() n'affecte pas le n à l'intérieur de func_a(). Ces deux n sont des variables complètement différentes, ils ne se connaissent pas du tout, ils ont juste le même nom. C'est comme si des célébrités assortissaient leurs vêtements à Pékin et au Yunnan.

2) Lorsque la variable locale à l'intérieur de la fonction porte le même nom que la variable globale à l'extérieur de la fonction, la variable globale sera "protégée" dans la portée locale de la fonction courante et n'aura plus aucun effet . En d’autres termes, les variables locales sont utilisées dans la fonction, et non les variables globales.

L'utilisation des variables suit le principe de proximité. Si une variable du même nom est trouvée dans le scope local actuel, elle ne sera pas recherchée dans le scope global plus large. De plus, vous ne pouvez rechercher des variables que d'une petite portée à une grande portée, mais pas l'inverse, en utilisant des variables dans une portée plus petite.

Illustrons avec un exemple spécifique :

#include <stdio.h>

int n = 10;  //全局变量

void func1(){
    int n = 20;  //局部变量
    printf("func1 n: %d\n", n);
}

void func2(int n){
    printf("func2 n: %d\n", n);
}

void func3(){
    printf("func3 n: %d\n", n);
}

int main(){
    int n = 30;  //局部变量
    func1();
    func2(n);
    func3();
    printf("main n: %d\n", n);
   
    return 0;
}

Résultats d'exécution :

func1 n: 20
func2 n: 30
func3 n: 10
main n: 30

Bien que plusieurs variables n portant le même nom soient définies dans le code, leurs portées sont différentes. il n'y aura donc pas de conflits de noms.

Ce qui suit est une analyse de la sortie :

Pour func1(), la sortie est 20, évidemment le n interne de func1() est utilisé à la place du n externe.

Lorsque func2() est appelé, le paramètre réel n dans main() sera transmis au paramètre formel n dans func2(). À ce moment, la valeur du paramètre formel n devient 30. Le paramètre formel n est également une variable locale, il est donc utilisé.

func3() génère 10, en utilisant des variables globales. Comme il n'y a pas de variable locale n dans func3(), le compilateur ne peut rechercher la variable n qu'en dehors de la fonction, c'est-à-dire dans la portée globale.

L'instruction printf() dans main() génère 30, indiquant que n dans main() est utilisé à la place du n externe.

Pour plus de connaissances liées à la programmation, veuillez visiter : Enseignement de la programmation ! !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn