C语言笔记(十三)——作用域

一、作用域

    就是一个变量或者函数起作用的地方。

    一个c语言变量的作用域可以是代码块作用域、函数作用域或者文件作用域。

    (1)代码块作用域:代码块是{}之间的一段代码。

int main(void)
{
    int a = 0;
    a = 10;
    {
        int a = 100;//此处a的作用域是在这个{}范围内
    }
    printf("a = %d\n", a);//这个a表示的是a=10的值。
    return 0;
}

eg2:
int main(void)
{
    int a = 0;
    a = 10;
    {
        int a = 100;
        printf("a = %d\n", a);
    }
    return 0;
}

注:出现在{}之外的变量是全局变量

二、auto关键字

    auto 自动变量,c语言的默认变量都是auto,可写可不写。

auto int a = 0;等同于
int a = 0;

三、register寄存器变量

    通常变量在内存中,如果能把变量放到CPU的寄存器里面,代码执行效率会更高

register int i = 0;//建议,若有寄存器空闲,那么这个变量就放到寄存器里面使用

注:对一个register变量是不能进行取地址操作的

四、代码块作用域的静态变量

    静态变量是指内存位置在程序执行期间一直不改变的变量,一个代码块内部的静态变量只能被这个代码块内部访问。

int mystatic()
{
    int a = 0;
    printf("a =%d\n", a);
    a++; //a++只能在这个{}内访问
}
int main()
{
    int i;
    for(i = 0; i < 10; i++)
    {
        mystatic();
    }
    return 0;
}

int mystatic()
{
    static int a = 0; //静态变量,只初始化一次(即只在开始时运行了一次,后面不管运行几次都跟它无关),且程序运行期间,静态变量一直存在
    printf("a = %d\n", a);
    a++;
}
int main()
{
    int i;
    for(i = 0; i < 10; i++)
    {
        mystatic();
    }
    return 0;
}


    注:函数通常是全局的,而一旦用static进行限制,即:

 static void test()

{

}

那该函数就只能在当前这个文件中使用,不能被别的文件调用。

五、代码块作用域外的静态变量(即全局变量)

    代码块之外的静态变量在程序执行期间一直存在,但只能被定义这个变量文件访问

六、extern 跨文件作用域

    当想调用另一个文件中的某个变量时,需要用extern在本文件中声明。

    比如:想在本文件中调用a.c文件中的mymax变量,在程序的开头加下面这一句

extern int mymax;
不加extern,则表示全局变量。

猜你喜欢

转载自blog.csdn.net/qq_37764129/article/details/80783457
今日推荐