Menu
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

C 变量作用域


现在你已经了解了函数的工作原理,学习变量在函数内部和外部的行为非常重要。

在 C 中,变量只能在创建它们的区域内访问。这被称为 **作用域**。


局部作用域

在函数内部创建的变量属于该函数的 *局部作用域*,只能在该函数内部使用。

示例

void myFunction() {
  // 属于 myFunction 的局部变量
  int x = 5;

  // 打印变量 x
  printf("%d", x);
}

int main() {
  myFunction();
  return 0;
}
自己试一试 »

**局部变量** 不能在它所属的函数外部使用。

如果你尝试在函数外部访问它,就会发生错误。

示例

void myFunction() {
  // 属于 myFunction 的局部变量
  int x = 5;
}

int main() {
  myFunction();

  // 在 main 函数中打印变量 x
  printf("%d", x);
  return 0;
}
自己试一试 »

全局作用域

在函数外部创建的变量被称为 **全局变量**,属于 *全局作用域*。

全局变量可以从任何作用域(全局和局部)内访问。

示例

在函数外部创建的变量是全局的,因此任何人都可以使用它。

// 全局变量 x
int x = 5;

void myFunction() {
  // 我们可以在此处使用 x
  printf("%d", x);
}

int main() {
  myFunction();

  // 我们也可以在此处使用 x
  printf("%d", x);
  return 0;
}
自己试一试 »

变量命名

如果你在函数内部和外部使用相同的变量名,C 会将它们视为两个独立的变量;一个在全局作用域(函数外部)可用,另一个在局部作用域(函数内部)可用。

示例

函数将打印局部 x,然后代码将打印全局 x

// 全局变量 x
int x = 5;

void myFunction() {
  // 与全局变量(x)同名的局部变量
  int x = 22;
  printf("%d\n", x); // 指向局部变量 x
}

int main() {
  myFunction();

  printf("%d\n", x); // 指向全局变量 x
  return 0;
}
自己试一试 »

但是,你应该避免对全局变量和局部变量使用相同的变量名,因为它会导致错误和混淆。

一般来说,你应该谨慎使用全局变量,因为它们可以从任何函数访问和修改。

示例

myFunction 中更改 x 的值

// 全局变量
int x = 5;

void myFunction() {
  printf("%d\n", ++x); // 将 x 的值增加 1 并打印它
}

int main() {
  myFunction();

  printf("%d\n", x); // 打印全局变量 x
  return 0;
}

// x 的值现在是 6(不再是 5)
自己试一试 »

结论

总之,尽可能使用局部变量(并使用良好的变量名)。这将使你的代码更易于维护和理解。但是,你可能会在处理现有的 C 程序或与他人协作时遇到全局变量。因此,了解作用域的工作原理以及如何有效地使用它很重要,以确保你的代码清晰且功能正常。



×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.