C语言总结day01

day01

1、 C语言标识符

  • C语言标识符需满足以下条件
    • 只能由英文字母(26个英文字母,包括大小写即共52个)、数字(0-9)和下划线组成
    • 长度为1-32
    • 必须以英文字母或下划线开头

2、C语言风格

  • C语言严格区分英文字母的大小写
  • C语言用“;”作为语句分隔符
  • C语言中“{}"用于标识一组语句,构成复合句(故需要配对使用)
  • C程序书写格式自由,一行内可以写几个语句,一个语句可以写在几行上

3、C程序的开发过程

  • C源程序(.c)—>目标程序(.obj)—>可执行文件(.exe文件)
    通过编辑—>编译源程序—>通过连接其他目标文件和库函数

4、数据类型

  • 基本数据类型
    C语言总结day01_第1张图片

  • 常量和变量
    1、常量

    • 整型常量(如100,-100等)
      • 十进制常量
        • 其形式是:d(其中d可以是0-9的一个或多个十进制数位,第一位不能是0)
      • 八进制常量
        • 其形式是:0d(其中d可以是一个或多个八进制数(0~7之间)),起始0是必须的引导符。
      • 十六进制常量
        • 其形式是:0xd(d可以是一个或多个十六进制数(从09的数字,并从"a""f"的字母)),引导符0是必须有的,字母X可以用大写或小写
        • 注意:在一个常数后面加上一个字母l或L,则认为是长整型,如10L,012L,0XAL,0x4fl等
        • 整型数据在内存中是以二进制方式存放的,最高位为符号位,并以补码表示。将一个十进制整数转化为补码表示的方法如下:
          • 对于正数,其补码表示与原码相同。
          • 对于负数,其补码表示为它的反码加1;反码为除符号位,其余数值位取反。
          • 十进制转二进制:例-35=-(32+2+1)(故为1010 0011),-35.25(小数位为1/4)(故为1010 0011.01);十六进制是在二进制的基础上进行的(以二进制4位一组进行转化);八进制也是在二进制的基础上进行的(以二进制3位一组进行转化)。
          • 注意点:在补码中+0和-0都用00000表示,而原码和反码的+0和-0表示方法不一样,故补码相对于原码和反码多出一个位置(用以表示-128),这个-128相对于原码中的-0的二进制表示法.
    • 实型常量:也称为浮点型常量
      • 小数点之前的是整数部分,小数点之后的是尾数部分,它们是可省略的。小数点在没有尾数时可以省略,如(12.24,.34,-.123,-0.0023)都是合法的实型数据。
      • 十进制小数形式:由数字和小数点组成。(如:123.456,-56.79等)
      • 指数形式 :如12.34e3(代表12.34*103),0.145E-25(代表0.1455*10-25)等,由于在计算机输入或输出时,无法表示上角或下角,故规定以字母e或E代表以10为底的指数。但注意:e或E之前必须有数字,且e或E后面必须为整数。如不能写成e4,12e2.5。
      • 注意:在C编译系统中将浮点型常量按双精度来处理(即double型,分配8字节);而float型为4字节,故当float a=3.14159;这样定义的时候会发生警告。解决办法:在浮点型常量后边加上F或f,就表示是float型常量,分配4字节。例如float a = 3.14159f;
    • 字符常量
      • 普通字符:用单撇号括起来的一个字符,如:‘a’,‘3’,'#‘等,注意不能写成’ab’
      • 字符串常量:用双撇号把若干个字符括起来。“boy”.
        • 注意:在C语言中,字符串常量在内存中存储时,系统自动在字符串的末尾加一个“串结束标志”,即ASCII码值为0的字符NULL,常用\0表示。故在程序中,长度为n个字符的字符串常量,在内存中占有n+1个字节的存储空间。
          • 而在sizeof这个函数实际上是获取了数据在内存中所占用的存储空间,以字节为单位来计数。(如int a=4;sizeof(a)的值为4);所以在计算字符串:例如:chat str[]=“hello”;sizeof(str)的值为6(会将\0也计算上)。而strlen这个函数计算时不包括结束字符。
      • 转义字符:C还允许用一种特殊形式的字符常量,就是以字符\开头的字符序列。通常转义字符表示ASCII中不可打印的控制字符和特定功能的字符。
        • \o,\oo,\ooo:其中o表示一个八进制数字(例如:'\012’代表八进制的12(即十进制的10)的ASCII码所对应的字符"换行符");\xh[h…]其中h代表一个十六进制数字。
        • 常用转义字符:‘\n’代表换行;’\t’代表将输出位置跳到下一个tab位置(制表位置),一个tab位置为8列;'\r’代表回车;A对应的ASCII值为65;a对应的ASCII值为97;故小写字母比大写字母大32(ASCII用八个二进制位表示一个字符,即1B)
        • 注意:转义字符中只能使用小写字母,每个转义字符只能看做一个字符。(char ch=‘\124’;printf(“%c\n”,ch);)
      • 符号常量:C语言还允许将程序中的常量定义为一个标识符,称为符号常量,符号常量一般使用大写英文字母表示,区别于一般用小写字母表示的变量。符号常量在使用前必须先定义,定义形式为(#define 符号常量名 常量;例如#define PI 3.1415926);
        • 注意:不能对符号常量赋以新值。
        • 注意区分typedef:typedef是为数据类型起一个新名字。

    2、变量

    • 变量代表一个有名字的、具有特定属性的一个存储单元。它用来存放数据,也就是存放变量的值。
    • 变量名和变量值的区别:例如int a = 3;
      • 变量的名:其中a是变量的名,3是变量的值(即存放在变量a的内存单元中的数据)。变量名实际上是以一个名字代表的一个存储地址。
    • 变量必须先定义后使用(C语言中变量定义和变量声明的区别)
      • 变量的定义:用于为变量分配内存空间,还可以为变量指定初始值。程序中,变量有且仅有一个定义。
      • 变量的声明:是告诉编译器,这个变量在别的地方已经定义了,不会为它再重新分配内存,如extern int n;语句是声明整型变量n.
      • 区别:定义也是声明,extern声明不是定义。定义分配内存空间,而声明不会。通过使用extern关键字声明变量名而不是定义它。注意:程序中变量可以声明多次,但只能定义一次。
      • C语言中头文件中extern的作用
        • 为了起到全局变量的作用,即一个变量在一个文件中定义了,可以在其他文件中修改。
        • 这样可以在.h头文件中,使用extern修饰,然后在其他文件中使用该变量。
        • 在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。
        1. extern修饰变量的声明。
          举例来说,如果文件a.c需要引用b.c中变量int v,就可以在a.c中声明extern int v,然后就可以引用变量v。能够被其他模块以extern修饰符引用到的变量通常是全局变量。还有很重要的一点是,extern int v可以放在a.c中的任何地方,比如你可以在a.c中的函数fun定义的开头处声明extern int v,然后就可以引用到变量v了,只不过这样只能在函数fun作用域中引用v罢了,这还是变量作用域的问题。对于这一点来说,很多人使用的时候都心存顾虑。好像extern声明只能用于文件作用域似的。
        2. extern修饰函数声明。
          从本质上来讲,变量和函数没有区别。函数名是指向函数二进制块开头处的指针。如果文件a.c需要引用b.c中的函数,比如在b.c中原型是int fun(int mu),那么就可以在a.c中声明extern int fun(int mu),然后就能使用fun来做任何事情。就像变量的声明一样,extern int fun(int mu)可以放在a.c中任何地方,而不一定非要放在a.c的文件作用域的范围中。对其他模块中函数的引用,最常用的方法是包含这些函数声明的头文件。
        3. 使用extern和包含头文件来引用函数有什么区别呢?
          extern的引用方式比包含头文件要简洁得多!extern的使用方法是直接了当的,想引用哪个函数就用extern声明哪个函数。这大概是KISS原则的一种体现吧!这样做的一个明显的好处是,会加速程序的编译(确切的说是预处理)的过程,节省时间。在大型C程序编译过程中,这种差异是非常明显的。
      • extern int ival=10; //虽然ival声明为extern,但是它初始化了,代表这是个定义。
    • 常变量(C99允许使用常变量)
      • 例如:const int a = 3;表示a被定义为一个整型变量,指定其值为3,而且在变量存在期间其值不能被改变。
      • 常变量与常量的区别是:常变量具有变量的基本属性:有类型,栈内存单元,只是不允许改变其值。常变量有名字而常量没有名字。故有名字就可以在程序中被引用。
      • 常变量和符号常量的区别:
        • (#define PI 3.1415926)和(const float pi=3.1415926;)
        • 符号常量PI和常变量pi都代表3.1415926,在程序中都能使用。但二者性质不同:定义符号常量用#define指令,它是预编译指令,它只是用符号常量代表一个字符串,在预编译时,仅是进行字符替换,在预编译后,符号常量就不存在了(全部置换成3.1415926了),对符号常量的名字是不分配内存单元的。而常变量要占用存储单元,有变量值,只是该值不改变而已。从使用者的角度看,常变量具有符号变量的优点,而且使用更方便。有了常变量以后,可以不必多用符号常量。

你可能感兴趣的:(C语言,c语言,开发语言)