目录
1、前言
2、数组
数组定义
数组下标
数组的使用
3、操作符
4、常见关键字
关键字typedef
关键字static
1. 修饰局部变量
2. 修饰全局变量
3. 修饰函数
不好意思哈!!!博主这几天学校里比较忙,然后这几天都没有更新,可能有些小伙伴都等不及了,在这里我向大家表示我深深的歉意。
不过呢,我抽时间把初识C语言系列写了一下,这可是在五一写的哇,假期连夜爆肝出来的,希望大家能够接受我的歉意!!!我把初识部分基本算是写完结了,还有下一期的我也发布了,希望大家多多支持哈!一次学个够!不够评论区留言,我接着更!!!!
这个系列学完,下个系列就是初阶C语言了,大家敬请期待啦!
最后再次感谢大家的关注和支持,您的支持和关注,是对我最大的鼓励和帮助,谢谢!
最后祝大家五一节日快乐哈!!
首先呢,我们前面学习了一个数字的存储和使用,那么,如果我们想存储10个数字呢?我们不能一个一个的去存储,因为那样太麻烦了,所以我们便引入了数组。
C语言中的数组定义为:一种相同类型元素的集合。
比如:
char arr1[7] = "abcdefg";//字符
char arr2[7] = { 'a','b','c','d','e','f','g' };//字符
int arr3[9] = { 1,2,3,4,5,6,7,8,9 };//整型数组
像这样的就是一维数组(这里是初识部分,其他复杂的将放到后面的模块细讲)。
数组中,每一个元素都有一个下标,下标是从0开始的
数组中的元素通过下标来访问:
int arr[10] = { 0 };//这个表示的是数组的初始化
通过调试我们可以看到:没有给予元素值的部分默认为0
给个详细的图就是:
如果数组10个元素,那么下标范围就是0~9。
那么数组该怎么使用呢?
这就用到了循环的知识
看下面这个程序:
#include
int main()
{
int i = 0;
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
while(i<10)
{
printf("%d ", arr[i]);
i=i+1;
}
printf("\n");
return 0;
}
我们通过调试可以看到这样:
是不是数组元素的值和下标一一对应,一目了然呢。平时使用vs2019时要多多使用调试功能,会更好的理解哦!如果有不懂调试的,可以评论区评论或者私聊我哦。
当然了,如果我们想对数组输入元素值,也要借助循环:
#include
int main()
{
int i = 0;
int arr[10] = { 0 };//数组初始化,此时元素值都是0
while (i < 10)
{
scanf("%d", &arr[i]);
i++;
}
i = 0;
while(i<10)
{
printf("%d ", arr[i]);
i = i + 1;
}
return 0;
}
通过调试我们可以看到:
赋值前:
赋值后:
数值变化一目了然哈哈哈
数组就先介绍到这里哈!
这里主要先说一下算数操作符和一些赋值操作符
首先加减乘除大家想必都知道了,不知道的评论区说哦,我看见都会回答的!!!
=在C语言中是赋值,不是等于!!!!
比如:
int a=10;//把10赋值给a
C语言中的等于是==
常用于判断
如:
if(a==5)//判断a是否等于5,满足条件则进入语句,打印出a的值
{
printf("%d\n",a);
}
#include
int main()
{
int a = 5;
int b = 10;
a = a + 5;//a=10
printf("%d\n", a);
a += b;//等价于a=a+b;即a=20;
printf("%d\n", a);
return 0;
}
这里列举一个加法的,其他的同理。
然后是单目操作符
这里面的一些想必大家也比较熟悉了,这里说一下强制类型转化
#include
int main()
{
float a = 1.5f;//单精度浮点型1.500000
printf("%f\n", a);//1.500000
printf("%d\n", (int)a);//强制转化为int类型,结果为1
return 0;
}
像这样就可以转化成自己需要的类型了!!!
>
>=
<
<=
!= 用于测试“不相等”
== 用于测试“相等”
&& 逻辑与
|| 逻辑或
exp1 ? exp2 : exp3
exp1, exp2, exp3, …expN
[]() . ->
前三个大家都比较熟练了,后面几个遇到了再给大家说,后期都会细讲的,不要太着急啊!!!
最后一部分说一下常见的关键字
注意:关键字不能用来命名!!!
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
这里都是常见的关键字,里面的好多前面也见识过了,这里着重强调几点:
typedef顾名思义是类型定义,这里理解成类型重命名
//将unsigned int 重命名为uint, 所以uint也是一个类型名
typedef unsigned int uint;
int main()
{
//观察num1和num2,这两个变量的类型是一样的
unsigned int num1 = 0;
uint num2 = 0;
return 0;
}
就是如上面这样理解的,自己好好体会一下呗!有时候这样命名可以节约名字的长度哈哈哈哈,是不是很方便呢?
在C语言中:
static是用来修饰变量和函数的
1. 修饰局部变量-称为静态局部变量
2. 修饰全局变量-称为静态全局变量
3. 修饰函数-称为静态函数
这里面几条我们一条一条给大家分析一下:
这个是未用static的
#include
void test()//写的一个测试函数
{
int i = 0;
i++;
printf("%d ", i);
}
int main()
{
int i = 0;
for (i = 0; i < 10; i++)
{
test();//打印出10次1
}
return 0;
}
然后我们看看用static修饰局部变量
#include
void test()
{
//static修饰局部变量
static int i = 0;//这里表明了i在函数结束的时候并没有被释放掉,而是依旧存在
i++;
printf("%d ", i);
}
int main()
{
int i = 0;
for (i = 0; i < 10; i++)
{
test();
}
return 0;
}
因为没有被释放,所以i不断的增加1,导致上述结果的出现!
static修饰局部变量改变了变量的生命周期
让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。
分两个.c文件,在add.c文件中命名的数据g_val是全局变量,可以在test.c文件中直接使用
结果如下
完美打印了是不是!!!
哈哈哈
下面我们用一下static修饰一下全局变量
当我们在add.c文件中使用static修饰全局变量时,系统会报错!!!
原因是:当用static修饰全局变量的时候,这个全局变量的外部链接属性就变成了内部链接属性,其他的源文件(.c)就不能再使用这个全局变量了。
最后来看修饰函数的时候:
我们的函数(实现加法)放在add.c中
主函数在test.c中
这个时候我们运行的结果是这样的
正好实现了目的呢!
那么我们看看static修饰后的:
运行后:
是的,它再次报错了,而结果也是同修饰全局变量时一样,无法解析
这也就是说,这个函数现在进不到主函数了,主函数中的函数相当于没有定义,系统不能够识别。
所以:一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用
好了,这一篇的内容就讲到这里了,喜欢博主的小伙伴别忘了留下你们的关注和点赞,有需要的记得收藏哦!博主会不断更新的,一起加油学习吧!!
下期见!!!