8.1指针是什么?

    • 直接访问
    • 间接访问
    • 指针(地址)
    • 指针变量P222
    • 注意 指针在没有指向特定位置前,可以赋值为 NULL。省的造成系统崩溃。

    C语言没有引用啊,C++才有. 引用能起到指针的部分作用,但是比指针安全. 一个引用可以看作是某个变量的一个”别名”


    8.2指针变量

    1. 指针运算符,表示是*指向
    2. &取地址运算符
    3. 指针变量作为函数参数
    4. 注意p228,函数实参与形参之间的参数传递”是单向传递“的。只能由实参传给形参。
    5. 不可能调用函数,来改变实参指针变量的值;但是可以在所调用的函数中实现对实参指针变量所指变量的值

    8.3通过指针引用数组

    1. int *p=a
    2. int *p=&a[0]
    3. []是变址运算符p232,a[i] *(a+i)
    4. p234 使用p++ 直接进行地址的控制,来进行输出,可使程序简洁高效。
    5. _p++ , _p(++) (结合性自左向右)
    6. 用数组名做函数参数。4种对应关系 p241
    7. **arr[i]和(arr+i)无条件等价 p238
    8. 多维数组的地址
    9. a[i][j]和((a+i)+j) *(a[i]+j)这三个完全等效
    10. 在指向行的指针前面加一个*,就成为指向列的指针。
    11. 在指向列的指针前面加一个&,就成为指向行的指针。

    8.4通过指针引用字符串

    1. %s输出字符串格式符 %c
    2. C语言中只有字符变量 没有字符串变量,字符串是放在字符型数组里面的
    3. 字符串输入输出,都是可以直接用scanf printf()变量名实现的,而不用像其他数组一样,要加上for循环。也不用加&地址符。p160
    4. 下标法 移动指针变量法(地址法)p261
    5. 数组可以在定义时对各元素赋初值,但是不能用赋值语句对字符数组中全体元素整体赋值。p264
    6. char *a定义后一定要及时对他初始化地址,指定其指向,要不然会有严重后果。p264
    7. 可变格式输出函数 p266

    8.5指向函数的指针

    1. 函数指针p266
    2. int (*p)(int,int); p=max;
    3. 用指向函数的指针做函数参数。p271编写通用函数 结构化程序设计方法

    8.6返回指针值的函数

    1. int *a(int x,int y) { ……}

    8.7指针数组和多重数组

    1. int p[] 指针数组,这个数组是int型的。
    2. int (*p)[] 指向某一一维数组的指针
    3. 指向指针数据的指针变量 char **p p280
    4. 间接访问、二级间址

    8.8 动态内存分配与指向他的指针变量p285
    include

    1. 全局变量存在静态存储区非静态的局部变量是分配在内存的动态存储区的。称之为
    2. 动态存储区
    3. 特别的自由存储区 可随时开辟 随时释放。由于未在声明部分定义其为变量或者数组,只能通过指针来引用这些数据
    4. 库函数malloc calloc realloc 其基类型都是void,无类型指针,仅提供一个地址,不指向任何具体的对象。
    5. malloc(SIZE)
    6. calloc(n,size) 为一维数组分配空间
    7. free(*p)
    8. realloc(*p,size)
    9. void指针类型 指向空类型 仅得到一个空地址,不能指向任何对象、变量。

    8.9 小结