重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
目录
创新互联是一家网站设计公司,集创意、互联网应用、软件技术为一体的创意网站建设服务商,主营产品:响应式网站开发、品牌网站建设、网络营销推广。我们专注企业品牌在网站中的整体树立,网络互动的体验,以及在手机等移动端的优质呈现。成都网站制作、成都做网站、外贸营销网站建设、移动互联产品、网络运营、VI设计、云产品.运维为核心业务。为用户提供一站式解决方案,我们深知市场的竞争激烈,认真对待每位客户,为客户提供赏析悦目的作品,网站的价值服务。编辑
前言:
1.关键字:
2.#define的定义常量和宏
(1)#define定义符号
(2)定义宏
3.指针:
指针的存放与解引用:
计算指针变量的大小:
结尾:
时光飞逝,从一开始的什么都不懂的萌新到现在对C语言有一定认识的我们,我们C语言的知识宝库在不断的被拓展着,在学习的过程中我们也能不断的去完善自己。从一开始的初学C语言(1)到现在的初识C语言(完)。我也是经历了许多,初识C语言结束我们也会到达另一个高度。那么话不多说,现在就开始我们的初识C语言的完结篇吧。
1.关键字:在C语言中也存在着类似操作符,可以让我们的C语言文件变得更加便利的英文,我们将这一类英语单词称为——关键字。
在这其中有一部分关键字我们在初识C语言的时候暂时不会用到,所以今天我们就简略的讲解一下吧。
注:变量名字不能取为关键字!
(1)auto:
意为自动,自动创建自动销毁,局部变量都为自动变量,现如今C语言自动省略auto。
int main()
{
int num = 10;
auto int sum = 20;//等于int sum = 20
return 0;
}
(2)break:
break用于循环语句中,用于打破循环(跳出循环),使循环结束。
int main()
{
int a = 0;
scanf("%d",&a);
int i = 0;
while(a)
{
i++;
if(i==a/2)
{
break;
}
}
printf("%d\n",i);
return 0;
}
(3)register——寄存器:
存储内存,用于服务CPU,寄存器单位为字节。register的使用。VS也会自动进行判断,将一部分它认为需要的变量加载到寄存器当中。(意义不大)
int main()
{
register int a = 10;//建议将a放在寄存器中
return 0;
}
(4)typedef——重命名:
如同上面的代码一样,typedef是将类型进行重命名,在里面我们将unsigned int 重命名为unit,之后我们要使用unsigned int类型的时候只要输入uint就可以进行运行。(上图age和age2的类型相同,类似别名)
(5)static——静态:
static三大作业:
1.修饰局部变量 2.修饰全局变量 3.修饰函数
修饰局部变量——在我们写代码的时候时常都用到函数,这个时候我们在函数里面创建一个变量,计算该变量,并输出,但是在函数结束的时候该变量被销毁。例如:
我们可以看到这个代码在函数部分运用了static,如果不用static的话每次函数结束a被销毁,每次打印a都是0开始然后进行a++得到1。但是在应用了static后,在函数结束后,a不会被销毁,第一次进入为1,第二次进入为2直到为10的时候停止打印。这就是static在局部变量的作用,延长函数的生命周期。这里就涉及到我们的栈区。
在栈区的临时变量,进入作用域创建,出作用域1释放,static的作用也就是将我们的局部变量延长生命周期。(注:变量还是局部变量,并没有因此变为全局变量)
全局变量——限定文件使用
在扫雷的时候,我们创建了许多的文件,比如1个头文件和2个.c文件,每次要在哪里用的时候只需要在,#include声明地方即可。
在修饰全局变量的时候也是如此。
我们在上述VS中创建了2个.c文件,当右边的.c文件要用左边的初始化变量的时候,我们需要extern声明。
但是我们在右边文件上加入static的时候会发现右边调试的时候报错,这是因为:
static使得全局变量的作用域变小,只能在本文件使用,在其他文件看来就相对于你没有这个变量,这个时候用extern也没有用了。
修饰函数——同修饰全局变量:
我们修饰函数和全局变量类似,声明用extern声明不同文件。在左边函数类型前面加static也是屏蔽这个语句,让其他文件找不到该函数。
2.#define的定义常量和宏 (1)#define定义符号这里我们用define来定义M,M就是被定义的常量,我们在后面或者把M付给a后打印a,还是直接打印M得到的结果都是100,这就是我们的define定义符号。
(2)定义宏在这段代码中,#define ADD(x,y) (x>y?x:y)就是我们的宏。我们现在不需要太懂,只要知道他是宏定义就行了。
3.指针:我们现在先来初步了解一下指针,并不是深入探究指针。那什么是指针呢?
指针也可以被我们称为地址,我们可以将每个指针看成我们现实世界中每个房间的门牌号,每个指针都有其对应的空间。
在内存中每个内存单元都有自己的编号,当我们在编译的时候,若是要找到该内存单元,我们可以通过编号来寻找。
那么,如何访问一个内存单元,内存单元的指针又是怎么产生的呢?
现在我们的电脑分为32位电脑和64位电脑。
我们以32位电脑为例:32位电脑就有32条地址线,这个时候我们往32条地址线上通电,我们通的电只能为高电频或者低电频,我们将这些电信号进行转换,转换为数字信号就对应了我们二进制为中的0和1。
这个时候我们32位机器上产生的所有2进制序列的可能性:
所以32位机器就有总共2^32次方条地址线,就可以管理2^32个地址,每个地址对应一个内存单元,也就是2^32次方个字节的内存空间。(每个内存单元占一个字节)
注:内存单元的编号,地址,指针是一个意思。
那么内存在C语言中是怎么运用的呢?
我们向内存申请4个字节来存储a这个变量,每个字节都有其对应的编号,我们他的编号是什么呢。如果一个字节的编号是2进制位的话未免有些太长了,所以在写地址和编号的时候我们通常将它从2进制位转换为16进制位进行说明。如下:
那我们可不可以将a的内存拿出来呢,那是当然可以的,我们来书写一串代码来表示。
这里就是我们a的内存所在的编号,这个时候就有人要问了,不是说a占4个字节吗,为什么取出来一个编号而已?这个时候我们调试起来。
我们就可以看见a就是占4个字节,只不过是VS在取地址a的时候,通常都取出第一个编号也就是它的起始地址。所以我们在打印的时候才会看到只有一个编号而已。那为什么一个整形在内存里面是8个数字呢,这是因为我们这里存放的是16进制,1个16进制对应4个2进制位,8个二进制位对应一个字节,所以这里存放着4个字节的大小。
指针的存放与解引用:int main()
{
int a = 10;
int*pa = &a;//存放a的地址,a的类型是整形,所以pa的类型是int*型
*pa = 20;//解引用pa,找到a的地址对a进行修改
printf("%d\n",a);//a结果从10改为20
return 0;
}
pa是一个变量,用来存放a的地址,所以我们也可以将pa说为指针变量。
*pa是对pa进行解引用,作用是通过pa的地址找到a,同时在这里也可以对a的值进行修改。pa不会被改变,pa是指针变量的变量名。
注:pa的类型是int*,不要怕pa和*连在一起,看为int类型。
同时指针也可以用来存放char类型的指针并修改。
当pc和ch指向同一块空间的时候,他们的作用相同。
注:内存中的地址会变化,比如输入一个整形类型10,2次打印的时候10的内存空间位置会发生变化。
指针自己也有自己一块独立的空间。
计算指针变量的大小:这里有人要问了,这里int大小是4可以理解,但是为什么char类型的b大小也是4呢?
这里我们要知道:指针变量是用来存放地址的,在32位机器上,它存放的是32位bit位。64位机器则是64个bit位。所以32位机器上,指针存放32bit的地址。要想指针存放得了32个bit位,则指针大小至少为32位nit位。所以在32位机器上,指针大小都为4.
结尾:到这里我们的初识C语言这个篇章就是彻底的结束了,就如同我们刚刚到来一样懵懂,经过了这段时间,我们也可以简单的进行代码的书写和认识了,那么到此我们为初识C语言的终章画上了圆满的句号。希望这个系列的内容可以为你提供一定的帮助,同时也是你从C语言中菜鸟到新手的一个转变,期待下一个篇章再会。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧