在第三次的学习中,我们了解了常变量
和标识符常量
,虽然提到了外部变量
,但并未进行详细的阐述,本章将进行详细说明,当然了,在C
语言中当然还有很多的其他的类型变量,如果一一的介绍,我想过一阵也都会忘掉,因此,今天除了将前一章并未介绍的外部变量进行讲解,在介绍一种枚举常量
和指针变量
,将不再介绍其余变量,在后续的学习中,边学便介绍更为合适。
外部变量
在实际的工程项目中,一般不会在一个.c
文件中将所有的代码全部写出,否则代码会过于冗余,不方便后续的维护和调试。
变量同样如此,我们可以单独写一个只包含变量的.c
文件,将相关的变量写在该文件中,那么在这次文件中定义的变量,如何在其他文件中使用呢?
此时就需要使用extern
,声明改变量 声明之后,即可在当前函数中使用,我们在add.c
文件中声明两个变量,一个为我们熟悉的整型变量
,另一个为双精度浮点型变量
,所谓双精度浮点型,即其精度要高于整型,可以用来存放小数等高精度数字
,其打印类型为%lf
,代码如下:
int g_val = 2023;
double v_val = 3.1415926;
此时我回到刚才的test.c
文件之中,如果在此文件中,想要使用add.c`中的两个变量,只需声明其为外部变量即可使用,运行以下代码:
#include<stdio.h>
extern g_val;
extern v_val;
int main()
{
int a = 1.213;
int b = 2;
int c = 0;
c = a + b;
// printf("c = %d\n",c);
printf("g_val = %lf\n v_val = lf\n",g_val,v_val);
return 0;
}
正常来说,其应该打印出对应的数值,但是我的在这里出现了错误,目前还为解决。。。
枚举常量
枚举,也就是一一列举的意思,将所有的内容都列举出来,其中的内容即称为枚举常量
,值不可更改,命令为enum
,运行如下代码:
#include<stdio.h>
enum radar
{
fc,
B,
Tp,
};
int main()
{
printf("%d\n",fc);
printf("%d\n",B);
printf("%d\n",Tp);
return 0;
}
保存编译可以看到以下结果:
也就意味着每一个枚举常量都有一个值,上述所说的不可更改是指:其对应的值无法更改
,什么意思呢,如果我想把其中的B
改为B0
,是可以的,如下所示:
#include<stdio.h>
enum radar
{
fc,
B,
Tp,
};
int main()
{
enum radar change = B;
change = fc;
return 0;
}
编译结果不会出现问题,如下:
但如果让改变其值为6,则会报错:
以上就是枚举常量的内容,看起来很高级的样子,但是:
目前还没搞懂它到底有什么作用,大家就一看,以后真用到再细学。
指针变量
指针,听起来非常的高级,让人心生畏惧,但其实原理很简单,就比如你要去学校的某个地方去见某个人,那你是不是得知道他的位置你才能找的到他,指针的作用就相当于这个地址
,你只有找到了这个地址
才能访问对应地址存放的数据,指针变量的类型为x*
,其中的x为你定义的变量类型,如果是整型则是int*
,如果是字符类型则为char*
,其余变量类型同理。在此处要打印地址和字符,所以需要知晓其打印类型
地址的打印类型为%p
字符的打印类型为%c
在C
语言中,取地址的操作符为&
,使用该操作符即可取出地址,但是取出地址是我们想要的吗,显然,答案是否定的。我们是需要使用或者改变该地址下存放的内容
,此时就需要对地址进行解引用
,解引用操作符为*
,下面上代码(代码的注释写的较为清楚因此不再进行逐条分析):
#include<stdio.h>
int main()
{
int a = 10; //4个字节
int* p = &a ; //取出a的地址
//存放地址的变量即为地址变量
*p = 50; //解引用操作符
char b = 'w';
char* m = &b;
*m = 'e';
printf("%p\n",p); //打印变量a的地址
printf("a = %d\n",a);
printf("%p\n",m); //打印变量b的地址
printf("a = %c\n",b);
return 0;
}
可以看到结果如下:
要注意的是:地址的结果并不会是一样的,即使是同台电脑在在不同时刻打印的地址都会不同,
因为每时每刻电脑都在运行,会向外分配空间,因此每次对于定义的变量分配的空间可能都不一样,其打印的地址的格式为16进制
,也许你并没有学过数电或其他的相应课程,所以你不懂什么是16进制
,不过这都没有关系,下面简要三种最常用的进制类型。
三种常见的进制
所谓进制,我的理解就是用来表示数字的一种形式,不同的进制之间无非是表示方式不同,其他的没有什么本质区别。
二进制
二进制,从名字中可以看出其只能表示2个数字,其用0和1
来表示二进制,计算机不可能识别我们说的话,写的字,它都是用一串的二进制数字组成的。在二进制中,其每位的权重是2,权重也就是每位代表的值的大小,例如
1010
在计算机中,最右侧的数字
为最低位
第0
位,向左依次加1,
那么上述四个二进制数字,那么如果计算为我们所数字的十进制数是多少呢,其计算方式如下
`重点:`几进制对应的权重即为几
十进制
十进制,用0 1 2 3 4 5 6 7 8 9
来表示,一个数值位25的十进制数,由上述可知,其权重自然为10,其实实际上是这样计算的:
十六进制
知道了二进制和十进制之后,那么十六进制是不是就能表示0 1 2 3 ……15
呢,对也不全对。在十六进制中,前十个数字仍然沿用了十进制的表示方法,不过后面6个采用字母表示,分别为A B C D E F
,想必现在随便给出一个16进制数,你都可以计算其值了,因此,在此处就不过多赘述。
进制间的转换
各进制之间的转换,大家可以自行查阅,当然了,你不查阅也行,反正由计算机,直接就可以进行进制转换,当然了多学点总是没错的,下面提供一份参考文章:
进制转化-知乎
好了,基础的C
语言学习到此基本告一段落,后续不再进行单独的基础内容阐述,基本的编写格式,常用的基础知识,大家都有了一定的了解,其他的内容将在后续的过程中,不断加入,欢迎大家一起来讨论学习。
码字不易,如果方面 ,辛苦大家点个赞喽,谢谢大家!!
Ps:外部变量的问题应该是链接问题,我会尽快解决并将演示效果于后续的某部分内容中。