学习笔记_006

  • 不能在注释内嵌套注释
  • 空格分隔语句的各个部分,让编译器能识别语句中的元素

    1. 基本类型:整数类型和浮点类型
    2. 枚举类型:在程序中只能赋予其一定的离散整数值的变量
    3. void 类型:表明没有可用的值
    4. 派生类型:指针类型、数组类型、结构类型、共用体类型和函数类型
  • sizeof(type)可得到存储对象或类型的字节大小

  • 变量其实就是程序可操作的存储区的名称
  • 变量声明向编译器保证变量以指定的类型和名称存在,这样编译器在不需要知道变量完整细节的情况下也能继续编译

变量声明有两种情况:
1、需要建立存储空间。例如:int a 在声明的时候就已经建立了存储空间
2、不需要建立存储空间的,通过使用extern关键字声明变量而不定义它
例如:extern int a, 其中变量 a 可以在别的文件中定义。

  • C 中有两种类型的表达式:

    1. 左值(lvalue):指向内存位置的表达式。左值可以出现在赋值号的左边或右边
    2. 右值(rvalue):右值是不能对其进行赋值的表达式,右值可以出现在赋值号的右边,但不能出现在左边
  • 常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。

在 C 中,定义常量的方式:
使用 #define 预处理器
使用 const 关键字

  • 存储类定义 C 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前
    1. auto 存储类是所有局部变量默认的存储类。auto只能用在函数内,即只能修饰局部变量
    2. register 存储类用于定义存储在寄存器中而不是 RAM中的局部变量。不能对它应用一元的 ‘&’ 运算符(因为它没有内存位置)
    3. static 存储类指示编译器在程序的生命周期内保持局部变量的存在,而不是在每次进入和离开作用域时进行创建和销毁。使用 static修饰局部变量可以在函数调用之间保持局部变量的值。static 是全局变量的默认存储类
    4. extern 通常用于两个或多个文件共享相同的全局变量或函数的时候

&返回变量的地址
*指向一个变量。

  • C 语言把任何非零和非空的值假定为 true,把零或 null 假定为 false

  • 函数声明会告诉编译器函数的名称及如何调用函数。函数的实际主体可以单独定义。

    函数声明包括以下几个部分:
    return_type function_name( parameter list );
    在函数声明中,参数的名称并不重要,只有参数的类型是必需的:
    int max(int, int);

  • 当调用函数时,有两种向函数传递参数的方式:

    1. 传值调用
      把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数不会影响实际参数。
    2. 引用调用
      通过指针传递,形参为指向实参地址的指针,当对形参操作时,就相当于对实参进行的操作

C 语言中有三个地方可以声明变量:
在函数或块内部的局部变量
在所有函数外部的全局变量
在函数的形参定义中

  • 局部变量和全局变量的名称可以相同,但是在函数内,局部变量的值会覆盖全局变量的值

  • 当局部变量被定义时,系统不会对其进行初始化,必须自行对其初始化。定义全局变量时,系统会自动对其进行初始化:

数据类型初始化默认值
int0
char‘\0’
float0
double0
pointerNULL

声明数组double balance[10];
初始化数组double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};
double balance[] = {1000.0, 2.0, 3.4, 7.0, 50.0};

  • 数组名是一个指向数组中第一个元素的常量指针.balance 是一个指向 &balance[0] 的指针,即数组 balance 的第一个元素的地址

  • 指针是一个变量,其值为另一个变量的地址。在使用指针存储其他变量地址之前,必须对其进行声明。声明指针变量的一般形式:
    type *var-name;
    type 是指针的类型,它必须是一个有效的 C 数据类型,var-name 是指针变量的名称。用来声明指针的星号 * 与乘法使用的星号相同。

  • 所有指针的值的实际数据类型,不管是整型、浮点型、字符型,还是其他的数据类型,都是一样的,都是一个代表内存地址的十六进制数。不同数据类型的指针所指向的变量或常量的数据类型不同。

  • 在指针变量声明的时候,如果没有确切的地址可以赋值,可以为指针变量赋一个 NULL 值。这是一个良好的编程习惯

    NULL 指针是一个定义在标准库中的值为零的常量
    在大多数的操作系统上,程序不允许访问地址为 0 的内存,因为该内存是操作系统保留的。内存地址 0 有特别重要的意义,它表明该指针不指向一个可访问的内存位置。按照惯例,如果指针包含空值(零值),则假定它不指向任何东西。

  • 一个指向指针的指针变量必须如下声明,即在变量名前放置两个星号。下面声明了一个指向 int 类型指针的指针:int **var;

  • 函数指针是指向函数的指针变量
    int max(int x, int y)
    {
        return x > y ? x : y;
    }

    int main(void)
    {
        /* p 是函数指针 */
    int (* p)(int, int) = & max; // &可以省略
    }

  • 定义指向结构体的指针
    struct Books
    {
       char  title[50];
       char  author[50];
       char  subject[100];
       int   book_id;
    } book;
    struct Books *struct_pointer;
    struct_pointer = &Book1;

  • 访问结构的成员,使用 -> 运算符:

char greeting[6] = {‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘\0’};
依据数组初始化规则,您可以把上面的语句写成以下语句:
char greeting[] = “Hello”;

  • 有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位。例如存放一个开关量时,只有 0 和 1 两种状态,用 1 位二进位即可。为了节省存储空间,并使处理简便,C 语言提供了一种数据结构,称为”位域”或”位段”:
    所谓”位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许按域名进行操作。
    struct bs{
        int a:8;
        int b:2;
        int c:6;
    }data;

  • data 为 bs 变量,共占两个字节。其中位域 a 占 8 位,位域 b 占 2 位,位域 c 占 6 位

  • 一个位域必须存储在同一个字节中,不能跨两个字节。如一个字节所剩空间不够存放另一位域时,应从下一单元起存放该位域。也可以有意使某位域从下一单元开始。例如:

    struct bs{
        unsigned a:4;
        unsigned  :4;    /* 空域 */
        unsigned b:4;    /* 从下一单元开始存放 */
        unsigned c:4
    }

  • 这个位域定义中,a 占第一字节的 4 位,后 4 位填 0 表示不使用,b 从第二字节开始,占用 4 位,c 占用 4 位。
  • 位域不允许跨两个字节,因此位域的长度不能大于一个字节的长度,也就是说不能超过8位二进位。位域可以是无名位域,这时它只用来作填充或调整位置。无名的位域是不能使用的。

    位域的使用和结构成员的使用相同,其一般形式为:
    位域变量名.位域名
    位域变量名->位域名

  • 共用体是一种特殊的数据类型,允许在相同的内存位置存储不同的数据类型。可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。共用体占用的内存应足够存储共用体中最大的成员。

  union Data
    {
       int i;
       float f;
       char  str[20];
    } data;

C 语言提供了 typedef 关键字,使用它来为类型取一个新的名字。

  • C 指令#define ,用于为各种数据类型定义别名,与 typedef 类似,但是它们有以下几点不同:
    1. typedef 仅限于为类型定义符号名称,#define 不仅可以为类型定义别名,也能为数值定义别名,比如您可以定义 1 为 ONE。
    2. typedef 是由编译器执行解释的,#define 语句是由预编译器进行处理的。

不同的国家和地区制定了不同的标准,由此产生了 GB2312、GBK、Big5、Shift_JIS 等各自的编码标准。这些使用 1 至 4 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文Windows操作系统中,ANSI 编码代表 GBK 编码;在日文Windows操作系统中,ANSI 编码代表 Shift_JIS 编码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值