上篇内容分享了两种语句(选择语句、循环语句)、函数、数组、各种操作符,本篇文章我们再来了解关于初识C语言的内容,同样,涉及到的知识不会太复杂,废话不多说,正文开始:
1.常见关键字
auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while |
C语言提供了丰富的关键字,这些关键字都是语言本身预先设定好的,用户自己是不能创建关键字的。
关键字我们在本篇先介绍几个,后面遇到了再进行细致的讲解。
1.1关键字 typedef:
typedef顾名思义就是类型定义,在这里就是类型重命名。
比如:
typedef unsigned int uint_32; //使用typedef重新定义一个类型:将unsigned int 重命名为uint_32
//但不会取消unsigned int 的含义
int main()
{
unsigned int num1 = 0; //unsigned 表示无符号,unsigned int表示无符号整数
//也就是处负数以外的整数
uint_32 num2 = 0; //经过重命名,这里的num2的类型与num1的类型一致
return 0;
}
1.2关键字static:
在C语言中:
static是用来修饰变量和函数的
- 修饰局部变量--称为静态局部变量
- 修饰全局变量--称为静态全局变量
- 修饰函数--称为静态函数
1.2.1修饰局部变量:
int main()
{
int a = 10;//局部变量,自动创建,自动销毁的
return 0;
}
局部变量是自动创建,在使用完之后便会自动销毁
当我们用static修饰局部变量之后会有怎样的效果呢?、
首先不用static修饰:
#include<stdio.h>
void add()
{
int i = 0; //局部变量自动创建,自动销毁并且,他只是作用于这个add函数
i++;
printf("%d ", i);
}
int main()
{
int i = 0;
while (i < 10)
{
add(); //设置一个函数
i++;
}
return 0;
}
可以很直观的看到,i每一次打印都是1,因为i在add函数中刚刚创建好是0,i++变成了1,然后打印,但是当再次进去add函数时,上次的i已经销毁,所以i又是从0开始,所以我们就得到了10个1
当我们用static修饰这个局部变量i的时候会有什么效果呢?
#include<stdio.h>
void add()
{
static int i = 0; //用static来修饰一下局部变量i
i++;
printf("%d ", i);
}
int main()
{
int i = 0;
while (i < 10)
{
add();
i++;
}
return 0;
}
当我们用static来修饰局部变量之后,可以看到,每次i++之后的值都被保留了下来,不再销毁,哎呀呀,这可不得了呀,所以呀,老铁们,static在修饰局部变量时的作用是:改变了局部变量的生命周期,让静态局部变量出了它自己的作用域仍然可以继续存在,直到整个程序结束,它才的生命周期才跟着结束,但是,并不影响它的作用域。
1.2.2修饰全局变量:
全局变量它的生命周期是整个程序的生命周期,只有程序结束,它的生命周期才跟着结束。当我们有两个.c文件时,在一个.c文件中创建一个全局变量,在另外一个.c文件中就可以使用这个变量,在使用时要用extern来声明外部符号
//extern 变量类型 变量名称; //用来声明外部符号
源文件:add.c:
int g_val = 2023;
源文件:test.c:
#include<stdio.h>
extern int g_val; //声明外部符号
int main()
{
printf("%d\n",g_val);
return 0;
}
当在一个源文件中创建一个全局变量,那么如果我们需要在另外一个源文件中使用这个全局变量,我们只需要用extern来声明一下,就可以使用了,那我们用static来修饰一下这个全局变量之后又会是什么样的效果呢?
源文件:add.c:
static int g_val = 2023;
源文件:test.c:
#include<stdio.h>
extern int g_val;
int main()
{
printf("%d\n",g_val);
return 0;
}
可以看到哇,这个static在修饰全局变量时居然不能使用了,所以呀,static在修饰全局变量时起的作用是:改变了全局变量的作用域,使得这个全局变量只能在自己所在的源文件内部进行使用。我们要知道全局变量是具有外部链接属性,而在用static修饰之后,使得它的外部链接属性变成了内部链接属性,使其只能在自己的源文件内部使用,从而给我们直观的感受就是改变了它的作用域。
1.2.3修饰函数:
函数也具有外部链接属性,所以我们同样使用两个源文件,在一个源文件中创建函数Add,在另外一个源文件使用Add函数:
源文件:add.c:
int Add(int x, int y)
{
return x + y;
}
源文件:test.c:
#include<stdio.h>
extern int Add(int,int); //这里注意,在使用extern声明外部函数时,需要加上参数类型,参数可加可不加
//int是参数类型
int main()
{
int x = 0;
int y = 0;
int add = 0;
printf("请输入两个数:>");
scanf("%d %d", &x, &y);
add = Add(x, y);
printf("add = %d", add);
return 0;
}
在用static修饰函数时效果和修饰全局变量是一样的,都是改变链接属性,我们来验证一下:
源文件:add.c:
static int Add(int x, int y)
{
return x + y;
}
源文件:test.c:
#include<stdio.h>
extern int Add(int,int);
int main()
{
int x = 0;
int y = 0;
int add = 0;
printf("请输入两个数:>");
scanf("%d %d", &x, &y);
add = Add(x, y);
printf("add = %d", add);
return 0;
}
效果很明显,也是不能使用了,所以static在修饰函数时改变了这个函数的链接属性,使其只能在本源文件中使用。