作用域理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 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未被声明."
}


猜你喜欢

转载自blog.csdn.net/LNZ001/article/details/54862558