C++学习:第二章C语言基础 - (十)修饰符、静态、全局、寄存器

版权声明:共享知识,欢迎转载 https://blog.csdn.net/kakiebu/article/details/82835236

1. 什么是局部变量与全局变量

在某一个块,指大括号对或者小括号对,定义的变量成为局部变量,离开这个范围就释放。

在外面定义的变量成为全局变量,要先声明后使用。

 

2. extern 声明全局变量

用extern 声明全局变量,但是再别的地方定义,甚至可以在别的文件中定义。

extern char w[7][10];

这就解决了上次局部变量回传的问题,a文件可以调用

 

a.c

#include<stdio.h>

extern char w[7][10];


int main(){

    printf(“%s\n”, w[3]);

    return 0;

}

b.c

char w[7][10] = {“aaa”, “bbb” …};

 

3. static 关键字限制变量只能够在定义的文件中使用

static 关键字限制变量只能够在定义的文件中使用,这样a文件就不能够调用了,第一次初始化时分配空间,一直保留,直至程序结束,空间就释放,a文件无法调用b文件的内容

a.c

#include<stdio.h>

extern char w[7][10];


int main(){

    printf(“%s\n”, w[3]);

    return 0;

}

b.c

static char w[7][10] = {“aaa”, “bbb” …};

 

4. 通过函数的方式解决static的限制问题

a.c 

#include<stdio.h>

//extern char w[7][10];

cahr * week(int n);


int main(){

    printf(“%s\n”, week(3));

    return 0;

}

b.c

static char w[7][10] = {“aaa”, “bbb” …};

char * week(int n){

    return w[n];

}

 

5. 利用字符串函数修改返回结果

a.c

#include<stdio.h>

//extern char w[7][10];

cahr * week(int n);


int main(){

    strcpy(week(3), “hhhh”);

    printf(“%s\n”, week(3));

    return 0;

}

b.c

static char w[7][10] = {“aaa”, “bbb” …};

    char * week(int n){

    return w[n];

}

 

6. 解决办法

上面的情况明显不安全,因此需要限制函数的使用范围 同样用static

a.c

#include<stdio.h>

//extern char w[7][10];

cahr * week(int n);



int main(){

    strcpy(week(3), “hhhh”);

    printf(“%s\n”, week(3));

    return 0;

}

b.c

static char w[7][10] = {“aaa”, “bbb” …};

static char * week(int n){

    return w[n];

}

之前弄的变量无法回传的问题解决办法第二种

#include <stdio.h>


char * week(int n){

    static char w[7][10] = {“aaa”, “bbb” …};

    return w[n];
}

int main(){

    printf(“%s”, week(4));

    return 0;

}

7. 其他

全局变量和静态局部变量,如果没初始化系统会自动初始化为0.

 

8. register

register 寄存器,是CPU自带的存储空间,访问速度会比内存快很多。注意,这里是请求,会不会被批准不好说。

register int a;

 

9. volatile

他修饰的变量随时可能被莫名其妙的修改。多线程或者外界硬件的操作所致

猜你喜欢

转载自blog.csdn.net/kakiebu/article/details/82835236