欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C语言学习笔记

程序员文章站 2022-03-30 13:43:28
dmr曾说过:C诡异离奇,缺陷重重,并获得如此大的成功。 一、C语言中的数据类型 1.1常量和变量 常量就是程序中不可改变其值的量,一般分为整形常量(短整型和长整形,无符号和有符号)、实型常量(单精度和双精度)、字符型常量、字符串常量。 c语言中的整形常量一般以十进制表示,但有的时候也可以用二进制、 ......

dmr曾说过:C诡异离奇,缺陷重重,并获得如此大的成功。

一、C语言中的数据类型 1.1常量和变量 常量就是程序中不可改变其值的量,一般分为整形常量(短整型和长整形,无符号和有符号)、实型常量(单精度和双精度)、字符型常量、字符串常量。

c语言中的整形常量一般以十进制表示,但有的时候也可以用二进制、八进制、十六进制来表示。

变量不同于常量,变量在内存中是可以改变其值的,在定义变量的时候要提前声明变量的类型和变量名,定义变量的一般形式是:类型关键字 变量名;

例如一个简单的小程序:

#include (stdio.h)

int main()

(

    int a;

    float b;

    char c;

    a = 1;

    b = 2.5;

    c = 'A' ;

    return 0;

)

任何一个C语言程序都必须有一个主函数的入口,这个主函数就是main()函数 变量名是用户定义的标识符,用于标识内存中的一个具体的存储单元,在这个存储单元中可以放入任何的值,简单来说一个变量就相当于给常量起了一个名字,或者把这个变量理解为一个放物品的盒子,变量就是给这个盒子起的名字,而盒子里面可以放你想放入的任何东西。

另外在对于变量名命名的时候应该遵循标识符命名规则:

(1)标识符只能由英文字母、数字和下划线组成

(2)标识符必须以字母下划线开头

(3)不允许使用C关键字为标识符命名

(4)标识符可以包含任意多个字符,但一般会有更大长度的限制,与编译器相关,不过大多情况先不会达到限制

注意:标识符是区分大小写的 另外C语言中的注释是使用//(单行注释)和 /* */(多行注释)来完成的 注释之间不能嵌套,即一个注释中不能加入另一个注释 多个变量之间使用逗号作为分隔符 赋值运算符=,用于变量赋值,将右边的表达式的值赋值给左边的变量(左边只能是变量,不能是常量或者表达式)

sizeof()是用来计算数据类型或表达式所占用的能存字节数(sizeof是关键字,不是函数名)

2.简单的算术运算和算术表达式

2.1.算符运算符和表达式 C语言中的算符运算符就相当于我们小时候学习数学中的加减乘除,算符运算符又分为三种,一元运算符、二元运算符、三元运算符 其中一元、二元、和三元运算符的区别在于需要几个操作数

一元运算符(-) 取相反数

二元运算符(* / % + -)乘,除,取余,加,减

其中需要注意的是各运算符之间的优先级别

在C语言中有一个和数学中的不同之处在于 eg: 1/2和1.0/2 这两个的性质,前者是整数除法,后者是浮点数除法

注意:C语言中求余运算仅仅限定在两个数都是整数的情况下,不能对两个实数型数据进行求余运算 2.2增1和减1运算符

在这个知识点里面值得注意的是先加加和后加加的问题

如:int i=3; 之后分别执行这两条语句

m=i++;

m=++i;

对于语句一,m=i++的意义在于先执行m=i 的赋值表达式,之后再执行增值的 i++表达式

对于语句二,m=++i的意义在于先执行++i 的增值表达式,之后再执行m = i 的赋值表达式

同样,i - - 和 - - i 也是如此

总结:对于此类问题可以采用就近原则,对于增1和减1的操作,后置自增自减,先取变量本身的值,再进行自增和自减的操作;前置自增自减,先进行自增自减,再取变换后的值

2.3宏常量和宏替换 &意为取地址符号 #define PI 3.14159 即为定义了一个宏常量,注意不需加上等号,而且不以分号结尾

宏常量的问题:宏常量没有数据类型,编译器对宏常量不进行类型检测,只进行简单的字符串的替换,这种替换过程中容易产生错误

所以需要引入const常量

const 常量弥补了宏常量的一个缺陷,

如: const double PI = 3.14159; //定义类型的const常量PI

自动类型转换和强制类型转换

一般我们可以把每一个数据类型的阶段比做成不同大小的杯子 当我有一个可以放1L水的杯子,另外还有一个可以放5L水的杯子,我们可以把1L杯子里面的水倒入到5L的杯子里面,那么这个过程就相当于是一个自动转换的过程。

那么,我们现在来看C语言里的数据类型自动转换 char ,short---int---unsigned---long---unsigned---float---double---long double 从左往右就相当于从小杯子往大杯子里面倒水的一个过程,不会产生溢出现象,因此对数据来说是安全的 另外其实还有一种转换方式叫做强制类型转换 强制类型转换就相当于可以装5L水的杯子里面放了1L的水,之后我把这个1L的水全部倒入到一个1L的杯子里面,这样就实现了强制类型转换,可是,对于强制类型来说一般是危险的,如果大杯子里面的水小杯子放不下,那么就会产生一种数据的溢出,就像水会撒出来一样,数据就会丢失。