1.对变量使用&运算符,可以取得该变量的地址。这个地址称为指向该变量的指针。
指针变量hoge_p保存了指向其他变量的地址的情况下,可以说“hoge_p指向hoge”。
对指针变量运用*运算符,就等于它指向的变量。如果hoge_p指向hoge,*hoge_p就等于hoge。
2.指针之所以需要定义类型是因为需要利用指针类型来从对应的地址中取出数据。
3.对指针加N,指针前进“当前指针指向的数据类型的长度*N”。
4.空指针是一个特殊的指针值。空指针是指确保没有指向任何一个对象的指针。
空指针确保它和任何非空指针进行比较都不会相等,因此经常作为函数发生异常时的一个返回值使用。
通常使用宏定义NULL来便是空指针常量值。#define NULL 0
5. p[i]是*(p+i)的简便写法。p[i]可以写成i[p],但是别写成这样。
*p++是指p先加1再与*结合。
6. malloc()主要有两种使用方式,①动态分配结构体②分配可变长数组。
ANSI C以前的C,因为没有void*这样的类型,所以malloc返回值的类型就被简单的定义成char*。char*是不能被赋给指向其他类型的 指针变量的,因此在使用malloc()的时候,必须要像下面这样将返回值进行强制转型:
book_data_p=(BookData*)malloc(sizeof(BookData));
7.如何解读C的声明:
❶首先着眼于标识符(变量名或者函数名)。
❷从距离标识符最近的地方开始,依照优先顺序解释派生类型(指针、数组和函数)。优先顺序说明如下,
①用于整理说明内容的括弧
②用于表示数组的[ ],用于表示函数的( )
③用于表示指针的*
❸解释完派生类型,使用“of”、"to"、"returning"将它们连接起来。
❹最后,追加数据类型修饰符(在左边,int、double等)。
比如 int (*func_p)(double);
解读:func_p is pointer to function(double) returning int.
中文:func_p是指向返回int的函数(参数为double)的指针。