变量的指针和指针变量 ●变量的指针 内存中存储某个变量的存储单元的首地址 ■指针(地址)实质上是一个整数(不是C的整型) ■可以通过变量的地址来间接的访问变量 指针变量 ■指针(地址)是一个数据,也可以用另一个变 量来存放,即指针变量 ■通过指针变量可以间接访问变量或内存数据 C语言程序设计-第7章指针6
C语言程序设计 - 第7章 指针 6 变量的指针和指针变量 ⚫ 变量的指针 ◼ 内存中存储某个变量的存储单元的首地址 ◼ 指针(地址)实质上是一个整数(不是C的整型) ◼ 可以通过变量的地址来间接的访问变量 ⚫ 指针变量 ◼ 指针(地址)是一个数据,也可以用另一个变 量来存放,即指针变量 ◼ 通过指针变量可以间接访问变量或内存数据
指针变量的定义 般形式 ■基类型*指针变量名; ●说明 “基类型”表示该指针指向的数据的类型 ■可以定义基类型为空类型void的指针变量 举例 int *pii ■char*pc1,c,*pc2 ■void*p; C语言程序设计-第7章指针7
C语言程序设计 - 第7章 指针 7 指针变量的定义 ⚫ 一般形式 ◼ 基类型 *指针变量名; ⚫ 说明 ◼ “基类型”表示该指针指向的数据的类型 ◼ 可以定义基类型为空类型void的指针变量 ⚫ 举例 ◼ int *pi; ◼ char *pc1, c, *pc2; ◼ void *p;
地址运算符( Address operator) 地址运算符& 获得操作数的地址(指针) ■单目运算符,自右向左结合,优先级较高 ■操作数应为各种类型的内存变量、数组元素 结构体成员等 ■操作数不能是表达式、常量、寄存器变量 ●举例 scanf("f &score)i ■inti,*p=&1; C语言程序设计-第7章指针8
C语言程序设计 - 第7章 指针 8 地址运算符 (Address Operator) ⚫ 地址运算符 & ◼ 获得操作数的地址(指针) ◼ 单目运算符,自右向左结合,优先级较高 ◼ 操作数应为各种类型的内存变量、数组元素、 结构体成员等 ◼ 操作数不能是表达式、常量、寄存器变量 ⚫ 举例 ◼ scanf("%f", &score); ◼ int i, *p=&i;
指针运算符( direction Operator) 指针运算符* 获得指针指向的内存数据 ■又称“间接访问运算符” 单目运算符,自右向左结合,优先级较高 ■操作数为具有指针(地址)意义的值 ●举例 ■inti,*p=&i; (*p)++;/*立++;*/ C语言程序设计-第7章指针9
C语言程序设计 - 第7章 指针 9 指针运算符 (Indirection Operator) ⚫ 指针运算符 * ◼ 获得指针指向的内存数据 ◼ 又称“间接访问运算符” ◼ 单目运算符,自右向左结合,优先级较高 ◼ 操作数为具有指针(地址)意义的值 ⚫ 举例 ◼ int i, *p=&i; (*p)++; /* i++; */
指针变量的引用 。指针变量也要“先赋值,后使用” 没有赋值的指针变量所存储的地址数据 是不确定的,对它的引用非常危险 对指针的赋值要注意类型匹配,必要时 可以使用强制类型转换,但要慎重使用 *p可以用于与指针p的基类型相同类型 的变量可以使用的任何场合 ●指针变量可以作为函数的参数 C语言程序设计-第7章指针
C语言程序设计 - 第7章 指针 10 指针变量的引用 ⚫ 指针变量也要“先赋值,后使用” ⚫ 没有赋值的指针变量所存储的地址数据 是不确定的,对它的引用非常危险 ⚫ 对指针的赋值要注意类型匹配,必要时 可以使用强制类型转换,但要慎重使用 ⚫ *p可以用于与指针p的基类型相同类型 的变量可以使用的任何场合 ⚫ 指针变量可以作为函数的参数