在C++中,main函数内部的变量的访问是有顺序存在的,其顺序分别为(从高到低):->
局部变量——全局变量——命名空间域
具体是什么意思?请看代码:

在局部变量与全局变量都存在时,main函数会优先访问局部变量,这也叫做局部优先原则
但如果不存在局部变量a=10呢?

当局部变量被去除后,main函数内部还是会遵循访问顺序来访问,但是它访问不到局部变量a,所以它就会去访问全局变量a

但这又是什么原因呢?有的人肯定会认为,这是因为rand是一个随机函数,创建rand变量就会与函数重名,但是这种原因是半对的,接着请看下图:->:

我把rand放在这里又可以打印出来了,这是为什么?
其实真正的原因是,在全局变量的rand与头文件#include<stdlib.h>是在同一作用域下,(即全局作用域),在同一作用域下的rand函数与rand变量命名重复,所以才会出现第一种报错的情况
关于第二种情况,则是作用域不同导致的,因为rand函数作用在全局作用域,rand变量作用在局部作用域,所以,作用域不同,它们的效果也不同
正文完