关于局部变量,形式参数和全局变量在代码块中的作用域
2015-11-28 14:21
369 查看
局部变量:在函数内部(代码块内部)声明的变量,也称为“自动变量”,进入代码块创建,退出代码块销毁
#include<stdio.h>
void fun()
{
int i = 0;
static int num = 0;
for (i = 0; i < 10; i++)
{
num++;
printf("%d\n", num); //1,2,3,4,5,6,7,8,9,10
}}int main()
{
fun();
system("pause");
return 0;
}
形式参数:把定义声明在函数参数里面,也相当于局部变量,只对当前代码块起作用。使用完成后自动销毁
#include<stdio.h>
int is_in(char *s, char c) //*s和c都属于形式参数
{
while (*s)
if (*s == c)
{
printf("exist");
return 1;
}else
{
s++;
}
return 0;
}int main()
{
char *p = "abcdef";
char c = 'd';
is_in(p, c);
system("pause");
return 0;
}
全局变量:所有在代码块之外({}大括号之外)定义的变量,当全局变量与局部变量冲突时,局部优先。
#include<stdio.h>
int a = 20;
int b; //声明
int fun1()
{
printf("b=%d", b); //20
return 0;
}int b = 30; //定义,b在所有代码块的外部,是一个全局变量,对程序所有代码块起作用,所以fun1可以调用,但需要提前声明
int fun2()
{
return 1;
}int main()
{
fun1();
system("pause");
return 0;
}
#include<stdio.h> int fun() { int a = 19; { int a = 20; { int a = 21; printf("%d\n", a); //21,局部优先,但只在当前代码块起作用,出代码块就销毁。 } printf("%d\n", a); //20,局部优先,但只在当前代码块起作用,出代码块就销毁。 return a; } } int main() { int word = 0; int a=0; word = fun(a); system("pause"); return 0; }
#include<stdio.h> #include<stdlib.h> int main() { printf("hello\n"); int num = 20; //(不同平台下可能会)出现error,C语言中变量声明必须放在在当前代码块的最前面,不是所有代码块的最前面 printf("%d", num); system("pause"); return 0; }
在局部变量之前加上static(静态变量)放在不同的位置:
#include<stdio.h>
void fun()
{
int i = 0;
static int num = 0;
for (i = 0; i < 10; i++)
{
num++;
printf("%d\n", num); //1,2,3,4,5,6,7,8,9,10
}}int main()
{
fun();
system("pause");
return 0;
}
#include<stdio.h> void fun() { int i = 0; for (i = 0; i < 10; i++) { static int num = 0; //初始化num,只执行一次,num是一个静态变量,创建后不再销毁,直到程序当前代码块结束 num++; printf("%d\n", num); //1,2,3,4,5,6,7,8,9,10 } } int main() { fun(); system("pause"); return 0; }
<pre class="objc" name="code">#include<stdio.h> void fun() { int i = 0; for (i = 0; i < 10; i++) { int num = 0; num是局部变量,每次进入循环时创建,出代码块时销毁 num++; printf("%d\n", num); //1,1,1,1,1,1,1,1,1,1 } } int main() { fun(); system("pause"); return 0; }
#include<stdio.h> void fun() { int i = 0; static int num = 0; for (i = 0; i < 10; i++) { num = 0; //赋值,不管num的值是多少,进入循环后,每次都会被赋值为0. num++; printf("%d\n", num); 1,1,1,1,1,1,1,1,1,1 } } int main() { fun(); system("pause"); return 0; }
#include<stdio.h> int main() { void fun(void); int i = 0; for (i = 0; i & 4000 lt; 10; i++) { fun(); //调用fun函数,j是局部变量,调用一次,销毁一次,每次调用,重新创建 } printf("\n"); system("pause"); return 0; } void fun(void) { int j = 0; j++; printf("%d ", j); //1,1,1,1,1,1,1,1,1,1 }
#include<stdio.h> int main() { void fun(void); int i = 0; for (i = 0; i < 10; i++) { fun(); //j是一个静态变量,创建后,直到程序当前代码块结束时销毁 } printf("\n"); system("pause"); return 0; } void fun(void) { static int j = 0; j++; printf("%d ", j); //1,2,3,4,5,6,7,8,9,10 }
#include<stdio.h> int main() { void fun(void); int i = 0; for (i = 0; i < 10; i++) { fun(); } printf("\n"); system("pause"); return 0; } static int j = 0; void fun(void) { j = 0; //赋值,每次调用都会给j赋值为1 j++; printf("%d ", j); //1,1,1,1,1,1,1,1,1,1
}
形式参数:把定义声明在函数参数里面,也相当于局部变量,只对当前代码块起作用。使用完成后自动销毁
#include<stdio.h>
int is_in(char *s, char c) //*s和c都属于形式参数
{
while (*s)
if (*s == c)
{
printf("exist");
return 1;
}else
{
s++;
}
return 0;
}int main()
{
char *p = "abcdef";
char c = 'd';
is_in(p, c);
system("pause");
return 0;
}
全局变量:所有在代码块之外({}大括号之外)定义的变量,当全局变量与局部变量冲突时,局部优先。
#include<stdio.h>
int a = 20;
int b; //声明
int fun1()
{
printf("b=%d", b); //20
return 0;
}int b = 30; //定义,b在所有代码块的外部,是一个全局变量,对程序所有代码块起作用,所以fun1可以调用,但需要提前声明
int fun2()
{
return 1;
}int main()
{
fun1();
system("pause");
return 0;
}
相关文章推荐
- yii2 控制器里 action 大小写组合造成的路由问题
- 一起talk C栗子吧(第六十五回:C语言实例--DIY字符串连接函数)
- Eclipse工具使用问题汇总
- ThinkPHP实现ajax仿官网搜索功能实例
- PHP的学习--可变变量
- 第一行代码 weather项目-自我总结
- Python爬取药智网的中药材图谱网页
- C语言基础总结
- C语言中的特殊符号
- 【C++】前序线索化二叉树及其遍历
- C语言求最大公约数最小公倍数
- C#interface
- 编程基础知识之工程管理
- Java锁(一)之内存模型
- Educational Codeforces Round 1 D.Igor In the Museum(DFS)
- java实现文件单词频率统计 topN top K
- SpringMVC中HandlerMethod的请求参数解析过程
- window7 下配置python2.7+tornado3.3开发环境
- 【Java小项目】电子音效器
- 【C++】后序线索化二叉树及其遍历