三、存储类型关键字(4)
1、auto:通常用于自动类型推导,允许开发者在声明变量时不必显示指定变量的类型,而是让编译器或是解释器自动推断出变量的类型,好处就是是代码更简洁。
auto a=6; //推断a为整型
auto b=2.55 ; //推断b为浮点型
//auto c; 这个是错误的。
auto m="good"; //推断为字符串类型
注意:auto并不是所有编程语言都有的,主要出现c++、JavaScript、TypeScript等,其它语言必须要显示指定变量。
2、extern:用于声明一个变量或函数的存在,好处就是易于管理和维护。
- 变量:如果你有多个文件使用同一个变量,一个文件来定义它,其他文件声明它。你不必每个文件都要重新定义它。
//file1.c
extern int nums;
//file2.c
int nums=3; //实际定义
- 函数:extern可以用来声明函数,这样可以让函数声明分散到不同的文件,而实际上函数的定义放在一个专门的文件中。
//file1.c
extern void delayms();
//file2.c
void delayms(){
//函数的实际定义
}
注意:在使用时,必须保证变量或函数的定义为唯一存在的
变量被声明为extern但没有定义会报错
在c++中extern还用于指定变量的连接属性,比如extern "c"
3、register:通常指的是处理器中的寄存器,是计算机内存单元,用于存储数据和指令。
register int s; //寄存器变量
4、static:这个意思就是静态,在不同的编程语言中有不同的用途,好处就是可以减少内存的使用,因为静态变量只在内存中占一份空间
//我这里就讲一下static在c/c++的作用
c/c++:static可以用来定义变量的存储期,静态局部变量在程序执行期间持续存在,并且它们在下次函数调用时仍然保持; static也可以定义全局变量,它们仅在定义它们的文件可见,在其他文件内函数调用时会出现“不认识”的情况; static成员函数只能被类的对象调用。
# include<stdio.h>
int add(int m){
static int b=m++;
printf("%d\n",m);
printf("b=%d\n",b);
}
int main(){
for(int i=0;i<5;i++){
add(i);
}
return 0;
}
因为b为静态类型(static),所以只会定义一次。static int b=m++;这个只在第一次调用执行。
四、其它关键词
1、const:用于声明一个变量,意在告诉你该常量不应被改变。
//声明一个整型常量
const int value=18;
//声明一个字符串常量
const char *sting ="hello";
# include<stdio.h>
int main() {
int a=10;
const int *ptr=&a;
//ptr=ptr+2; //错误,不能修改指针本身,但可以改变它指向的地址
a=20; //因为a不是常量所以可以改变
printf("%d",*ptr);
return 0;
}
2、sizeof:用来获取数据类型或者变量所占内存的大小 //这是一个操作符不是函数,strlen这个是函数。
# include <stdio.h>
int main() {
int m;
printf("%d\n",sizeof(m)); //%zu也是可以的
return 0;
}
3、typedef:用于定义新的数据类型名称
typedef int Panduam;
Panduam a,b; // Panduam相当于int 类型的别名。
typedef struct{
int age;
int height;
} Person; //Person是一个新定义的类型名称,代表一个结构体类型
Person name;
typedef enum{RED,GREEN,YELLOW} Colour;
//Colour是一个新定义类型,代表包含三个枚举值的枚举类型
Colour color=RED;
4、volatile:用于声明变量,已告知编译器该变量的值可能在程序控制之外被改变。
volatile int num;
void set_num(){
num=5;
}
void check_num(){
if(num) {
//做另外的操作
}
}
/*我写的可能比较粗糙,如果大家对于一些地方不解,可以看看其它博主写的内容。这个周末就一个字“累”,我将悼念这几天我掉的头发 ~ ~ */