版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LNZ001/article/details/54862558
例1如下:
#include <stdio.h>
int main(){
int test = 0;//(变量1)域外才能调用该变量
printf("域外:test=%d\t域外:%p\n\n",test,&test);
do{
int test = 0;//(变量2)只在域中有效,c++,std using namespace~
printf("域内:test=%d\t域内:%p\n",test,&test);
}while((test++)<5);//域外
printf("\n域外:test=%d\t域外:%p\n",test,&test);
return 0;
}
执行结果如下:
lnz@lnz:~/c_test$ gcc action_scope.c
lnz@lnz:~/c_test$ ./a.out
域外:test=0 域外:0x7ffd4ca25f60
域内:test=0 域内:0x7ffd4ca25f64
域内:test=0 域内:0x7ffd4ca25f64
域内:test=0 域内:0x7ffd4ca25f64
域内:test=0 域内:0x7ffd4ca25f64
域内:test=0 域内:0x7ffd4ca25f64
域内:test=0 域内:0x7ffd4ca25f64
域外:test=6 域外:0x7ffd4ca25f60
lnz@lnz:~/c_test$
例2如下:
#include <stdio.h>
int count = 5;
void test1(void);
void test2(void);
int main(){
printf("全局域:%p:%d\n",&count,count);
int count = 0;
printf("main内:%p:%d\n",&count,count);
test1();
test2();
return 0;
}
void test1(){
printf("test1内:%p:%d\n",&count,count);
}
void test2(){
static int count;
printf("test2内:%p:%d\n",&count,count);
}
执行结果如下:
lnz@lnz:~/c_test$ gcc action_scope_2.c
lnz@lnz:~/c_test$ ./a.out
全局域:0x601040:5
main内:0x7ffd3767f494:0
test1内:0x601040:5
test2内:0x601048:0
即使test1在mian函数内调用,采用的count也是全局变量,而不是mian内的.(如果没有全局声明,只在main内声明,在test1处是会报错的.)
例3如下:
#include <stdio.h>
#include <stdbool.h>
int main(){
int i = 3;
{
i++;//true.
}
if(true){
i++;//true.
}
func();
printf("%d",i);
return 0;
}
func(){
i++;//false."i未被声明."
}