C语言常见问题
问题:
在学习Java语言的时候,会用一节讲java语言的作用域,但是C语言却没有。那么C语言有作用域么,和java语言有什么区别?
代码1 (我们常这样写)
#include <stdio.h> //代码1 int main(int argc, char *argv[]){ int i = 20; for(int i = 0; i < 5; i++) {//在for里面初始化一个i,和main里面的不同。 printf("i = %d\n", i); } return 0; }
运行结果
bao:day0920 bao$ gcc -o test1 test1.c
bao:day0920 bao$ ./test1
i = 0
i = 1
i = 2
i = 3
i = 4
代码2
#include <stdio.h> //代码2 int main(int argc, char *argv[]){ int i = 20;//在main函数初始化一个变量i; for(i = 0; i < 5; i++) {//在for的作用域里面,将main的i再次赋值为0; printf("i = %d\n", i); } return 0; }
运行结果
bao:day0920 bao$ gcc -o test1 test1.c
bao:day0920 bao$ ./test1
i = 0
i = 1
i = 2
i = 3
i = 4
代码3
#include <stdio.h> //代码3 int main(int argc, char *argv[]){ int i = 2; for(i; i < 5; i++) {//这里的i 就是main函数里面初始化的i,但是for里面的第一个i没有进行任何“使用” printf("i = %d\n", i); } return 0; }
运行结果
bao:day0920 bao$ gcc -o test1 test1.c
test1.c:5:9: warning: expression result unused [-Wunused-value]
for(i; i < 5; i++)
^
1 warning generated.
bao:day0920 bao$ ./test1
i = 2
i = 3
i = 4
代码4
#include <stdio.h> int main(int argc, char *argv[]){ int i = 2; for(; i < 5; i++) {//这里的i 就是main函数里面初始化的i printf("i = %d\n", i); } return 0; }
运行结果
bao:day0920 bao$ gcc -o test1 test1.c
bao:day0920 bao$ ./test1
i = 2
i = 3
i = 4
!!!我的编译环境Mac ,VSCode (代码编译器)
通过代码1、代码2、代码3 、代码4 主要就是想说一下C语言变量的作用域等的问题。
如果还是不理解,我就再来个最终版,(把问题放大)。。
代码
#include <stdio.h> int main(int argc, char *argv[]){ //作用域main int i = 2; printf("i = %d\n", i); {//作用域A printf("i = %d\n", i); int i = 5; printf("i = %d\n", i); } return 0; }
运行结果
bao:day0920 bao$ gcc -o test2 test2.c
bao:day0920 bao$ ./test2
i = 2
i = 2
i = 5
不解释了,很清晰了。
java语言可以任意调用不同作用域里面的。
来源:51CTO
作者:小豹Miss鲍
链接:https://blog.csdn.net/weixin_44966900/article/details/101059505