c语言关键字

初学C语言的方法和捷径!

送分小仙女□ 提交于 2020-01-12 20:46:30
很多初学者都会问我 “我想学C,该怎么开始呢?” 群:894479708 今天我们就来聊一聊 属于初学者必须懂的知识 希望小伙伴们 能够牢记基础知识 唯有不断努力 才能更加顺利 好了,闲话不多说,开讲了! 基本常识 计算机语言: 把人与计算机之间交流的语言叫做计算机语言 计算机语言分为高级语言和低级语言 高级语言: 远离硬件 低级语言: 贴近硬件 指令: 是指计算机执行某种操作的命令 它由一串二进制数码组成。 一条指令通常由两个部分组成: 操作码+地址码 操作码 指明该指令要完成的操作的类型或性质 如取数、做加法或输出数据等 地址码 指明操作对象的内容或所在的存储单元地址 机器语言: 计算机本身各个部件之间沟通时所使用的语言 特点: 对计算机本身来说,只能识别由0和1代码构成的二进制指令 源程序: 把由高级语言编写的程序称为源程序 源程序——编译程序——目标程序 (二进制代码表示的程序,即计算机只识别目标程序) 编译程序: 如何把源程序转换成机器能够接受的目标程序,软件工作者编制了一系列的软件.通过这些软件,把用户按规定语法写出的语句一一翻译成二进制的机器指令. 这种具有翻译功能的软件称为“编译程序” C源程序: 用C语言构成的指令序列称为C源程序 C语言的代码编写: 按C语言的语法编写C程序的过程称C语言的代码编写 C语言源程序 文件名后缀是 .c 经过编译后,生成文件的后缀是

C语言基础:指针

旧街凉风 提交于 2020-01-12 18:10:52
【指针】 一、指针变量与定义 C语言有两种变量:其中变量(普通变量)存储内容值;地址变量(指针变量)存储地址值。 1、定义格式 类型名 *指针变量名;*是指针变量的标志,不包含在变量名里 注: (1)定义变量(普通变量、指针变量)都必须在前面有类型名。前类型后分号为定义语句。除此之外,其它语句都是执行语句。 (2)在定义指针变量时,指针变量名前的 * 表示现定义的是一个指针类型变量。星号并不是指针变量名的一总分,只是一个标志。 (3)指针变量专门用来存地址,禁止将一个整型直接赋给一个指针变量。 2、指针变量的引用 “&”取地址运算符,通过&运算符可以取出普通变量的地址。 “*”指针运算符,*可以取出指针变量所指向的普通变量的值(间接引用普通变量)。功能是 *地址 -》 取出内容值。 “&”“*”是单目运算符,优先级2级,方向从右向左 指针变量运算方法:(口诀四)地址变量得地址,得谁地址指向谁, 有*为内容值,不是读就是写,*在赋值号左边为写,其它都为读。无*为地址值,地址赋值意味着改指向。 注: (1)可以通过赋值使一个指针变量“指向”某一普通变量(指针变量=&普通变量)。 指针变量必须定义且初始化后再使用。 (2)在C语言中正确的做法是先让指针变量指向一个确定的存储单元后,再通过该指针变量引用它所指向的存储单元。 (3)变量名(普通变量、指针变量)都表示其存储单元内的值。 (4

C语言关键字const应用解析

被刻印的时光 ゝ 提交于 2020-01-12 14:46:06
只要学过C语言的,都有知道const这个关键字,知道是用来定义常量的,如果一个变量被const修饰,那么它的值就不能再被改变,那么还有什么其他作用呢? 一、const常用作用 1.修饰局部变量 const int n=5; int const n=5;/*二者是等价的,均表示变量n的值不能被改变了*/ 注意:在使用const修饰变量时,一定要给变量初始化,否则之后就不能赋值了! 接下来看看const用于修饰常量静态字符串,例如: const char * str = "fdsafdsa" ; 如果没有const的修饰,我们可能会在后面有意无意的写str[4]=’x’这样的语句,这样会导致对只读内存区域的赋值,然后程序会立刻异常终止。有了const,这个错误就能在程序被编译的时候就立即检查出来,这就是const的好处。让逻辑错误在编译期被发现。 2. 常量指针与指针常量 常量指针 是指针指向的内容是常量,可以有一下两种定义方式。 const int * n ; int const * n ; 需要注意的是一下两点: 1、常量指针说的是不能通过这个指针改变变量的值,但是还是可以通过其他的引用来改变变量的值的。 int a=5; const int* n=&a; a=6; 2、常量指针指向的值不能改变,但是这并不是意味着指针本身不能改变,常量指针可以指向其他的地址。 int a=5;

C语言复习2

时光怂恿深爱的人放手 提交于 2020-01-12 07:36:01
/*--> */ /*--> */ 4 、 atoi() atol atof () 实现 一、atoi函数(将字符串转换成整型数) 函数说明 atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。 二、itoa(把一整数转换为字符串 ) itoa(num,str,10); num:整数 str保存位置 10:以十进制转换 三、atof(将字符串转换成浮点型数) 函数说明 atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转 换,并将结果返回。参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分,如123.456或123e-2。返回值 返回转换后的浮点型数 四、atol(将字符串转换成长整型数) 函数说明 atol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。 返回值 返回转换后的长整型数。 5 、移位操作 >> << >>= <<=    位移位运算符是将数据看成二进制数,对其进行向左或向右移动若干位的运算。位移位运算符分为左移和右移两种,均为双目运算符

从零开始学习C语言04——数据类型、变量、sizeof运算符

一个人想着一个人 提交于 2020-01-11 08:50:59
C语言程序中,一定会有数据,这个数据就是由数字,单词和字符构成 数字又分整数和浮点数(浮点数就是小数,数学里也称实数) 字符就是键盘上所有的 a b c A B C 这6个是字符 数字 ‘1’ ’ 2’ ’ 3’ 这3个也是字符,但必须得是加了单引号的 + - / {}、 这些符号也是字符 **空格键也是字符 这些都能在ASC表能找到,反之能在ASC表在能找到的就可以是字符 ,ASC是什么,呵呵,这个上网查一下 还有就是单词,也可以说是字符串 就是比如 hello 或者 hello world 记住:字符用单引号表示,字符串用双引号表示 整数不用我说大家也该知道是什么 123 ,0, -234,1000 这些就是整数 浮点数(小数)也就是凡是带小数点的数就是浮点数 12.3 ,0.0,0.23,-7.7 这些就是小数(我还是直接说小数好了,说浮点有点不爽啊) 浮点数所占字节要比整数大,字节就是内存里的东东,这个暂时不需了解 你只需知道小数占的字节要比整数大就可以了,后面字节这个概念很重要 例如123.4和1234 123.4就比1234所占的字节大 说完数据类型我们说变量 C语言把数据存放在变量中,变量就是电脑内存里的一个盒子,用来保存数字或字符 这个盒子里面的东西是变化的,例如我放一个数字1放进这个盒子,这个盒子现在装的是数字1,然后我又放数字2进入

C语言数据类型

安稳与你 提交于 2020-01-10 20:35:37
C语言关键字: 也称保留字,是C语言预先定义的、具有特殊意义的单词。 数据类型关键字(12个): (1)char:声明字符型变量或函数 (2)double:声明双精度变量或函数 (3)enum:声明枚举类型 (4)float:声明浮点型变量或函数 (5)int:声明整型变量或函数 (6)long:声明长整型变量或函数 (7)short:声明短整型变量或函数 (8)signed:声明有符号类型变量或函数 (9)struct:声明结构体变量或函数 (10)union:声明共用体(联合)数据类型 (11)unsigned:声明无符号类型变量或函数 (12)void:声明函数无返回值或无参数,声明无类型指针 控制语句关键字(12个): A循环语句 (1)for:一种循环语句(可意会不可言传) (2)do:循环语句的循环体 (3)while:循环语句的循环条件 (4)break:跳出当前循环 (5)continue:结束当前循环,开始下一轮循环 B条件语句 (1)if:条件语句 (2)else:条件语句否定分支(与if连用) (3)goto:无条件跳转语句 C开关语句 (1)switch:用于开关语句 (2)case:开关语句分支 (3)default:开关语句中的“其他”分支 D返回语句 return:子程序返回语句 存储类型关键字(4个): (1)auto:声明自动变量一般不使用 (2

C语言 volatile用法

拥有回忆 提交于 2020-01-10 07:26:31
volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。 例如: volatile int i=10; int j = i; ... int k = i; volatile 告诉编译器i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编译器生成的可执行码会重新从i的地址读取数据放在k中。 而优化做法是,由于编译器发现两次从i读数据的代码之间的代码没有对i进行过操作,它会自动把上次读的数据放在k中。而不是重新从i里面读。这样以来,如果i是一个寄存器变量或者表示一个端口数据就容易出错,所以说volatile可以保证对特殊地址的稳定访问,不会出错。 /********************** 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1) 并行设备的硬件寄存器(如:状态寄存器) 2) 一个中断服务子程序中会访问到的非自动变量(Non

#ifdef,#else,#endif,#if 拾忆

最后都变了- 提交于 2020-01-10 04:01:39
预处理就是在进行编译的第一遍词法扫描和语法分析之前所作的工作。说白了,就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译。这样做的好处是,经过处理后的代码,将会变的很精短。 关于预处理命令中的文件包含(#i nclude),宏定义(#define),书上已经有了详细的说明,在这里就不详述了。这里主要是对条件编译(#ifdef,#else,#endif,#if等)进行说明。以下分3种情况: 1:情况1: #ifdef _XXXX ...程序段1... #else ...程序段2... #endif 这表明如果标识符_XXXX已被#define命令定义过则对程序段1进行编译;否则对程序段2进行编译。 例: #define NUM ............. ............. ............. #ifdef NUM printf("之前NUM有过定义啦!:) \n"); #else printf("之前NUM没有过定义!:( \n"); #endif } 如果程序开头有#define NUM这行,即NUM有定义,碰到下面#ifdef NUM的时候,当然执行第一个printf。否则第二个printf将被执行。 我认为,用这种,可以很方便的开启/关闭整个程序的某项特定功能。 2:情况2: #ifndef _XXXX ...程序段1... #else

【C语言笔记】#define与typedef的区别

≡放荡痞女 提交于 2020-01-09 18:53:05
1、#define define是预处理指令,在编译时不进行任何检查,只进行简单的替换 宏定义的一般形式为: #define 宏名 字符串 这里所说的字符串是一般意义上的字符序列,不要和C语言中的字符串等同,它不需要双引号。 2、typedef typedef是在C语言中用来为复杂的声明定义简单的别名,它本身是一种存储类的关键字,与auto、extern、mutable、static、register等关键字不能出现在同一个表达式中。 typedef取别名的一般形式为: typedef 旧名字 新名字 3、define与typedef的区别 (1)#define之后不带分号,typedef之后带分号。 (2)#define可以使用其他类型说明符对宏类型名进行扩展,而 typedef 不能这样做。如: #define INT1 int unsigned INT1 n; //没问题 typedef int INT2; unsigned INT2 n; //有问题 INT1可以使用类型说明符unsigned进行扩展,而INT2不能使用unsigned进行扩展。 (3)在连续定义几个变量的时候,typedef 能够保证定义的所有变量均为同一类型,而 #define 则无法保证。如: #define PINT1 int*; P_INT1 p1,p2; //即int *p1,p2;

c语言typedef关键字的理解

人走茶凉 提交于 2020-01-09 15:41:22
1.typedef的定义   很多人认为typedef 是定义新的数据类型,这可能与这个关键字有关。本来嘛,type 是数据类型的意思;def(ine)是定义的意思,合起来就是定义数据类型啦。   不过很遗憾,这种理解是不正确的。也许这个关键字该被替换为“typerename”或是别的词。 typedef 的真正意思是给一个已经存在的数据类型(注意:是类型不是变量)取一个别名,而非定义一个新的数据类型。      在实际项目中,为了方便,可能很多数据类型( 尤其是结构体之类的自定义数据类型 )需要我们重新取一个适用实际情况的别名。这时候typedef 就可以帮助我们。 例如: typedef struct student { //code }Stu_st,*Stu_pst; A)struct student stu1;和Stu_st stu1;没有区别。 B)struct student *stu2;和Stu_pst stu2;和Stu_st *stu2;没有区别。   这个地方很多初学者迷惑,B)的两个定义为什么相等呢?其实很好理解。   我们把“struct student { /*code*/}”看成一个整体,typedef 就是给“struct student {/*code*/}”取了个别名叫“Stu_st”;同时给“struct student { /*code*/}