c语言电子教案(指针)
第11章 指 针 知识点: 指针的定义 指针变量的使用 各种指针的使用 重点: 指针的概念及C语言指针使用的特点 指针变量的定义、引用 数组的指针、字符串的指针、函数的指针、指向指针的指针的使用 难点: 指针的运算和使用 指针在数组中的使用及使用特点 第11章 指 针 指针是C语言中的一个重要的概念,也是C语言的一个重要特色。 可以表示复杂的数据结构 能动态分配内存 能方便地使用字符串 有效而方便地使用数组 在调用函数时能得到多于1个的值 能直接处理内存地址等 11.1 地址和指针的概念 “直接访问”方式 按变量地址存取变量值的方式 “间接访问”方式 通过存放变量地址的变量去访问变量 变量的指针 就是变量的地址 指针变量 存放变量地址的变量 用来指向另一个变量 用“*”符号表示“指向” 定义一个指针变量 指针变量不同于整型变量和其他类型的变量,它是用来专门存放地址的。 必须将指针变量定义为“指针类型”。 一般形式 基类型 *指针变量名; 基类型:指针变量所指向的变量的类型。 例 float *pointer1; int *pointer2; char *pointer3; 指针变量的定义是通过*进行的 定义后的指针变量只能赋值指针,不能赋值为一般数据类型 指针变量的引用 & 与*运算符 单目运算,优先级2,自右向左结合 & 取地址运算符 取变量的地址,取出的地址一定是一个常数 &变量名=指针值 × * 指针运算符 指针变量所指向的内存单元,可称为指针变量所指的变量 与指针变量定义中的*不同 “*指针变量” 可以作为一个基类型变量来用 指针变量的初始化 一般形式 基类型 *指针变量名=初始地址值; 指针变量使用前必须先初始化或赋初值 零指针与空类型指针 零指针:(空指针) 定义:指针变量值为零 表示: int * p=0; 空类型指针 定义:指针变量不指向哪一种类型数据 表示: void *p; 使用时要进行强制类型转换 练习 指针变量作为函数参数 作用是将变量的地址传送到另一个函数中 想通过函数调用得到n个要改变的值,可以: 在主调函数中设n个变量,用n个指针变量指向它们 将指针变量作实参,将这n个变量的地址传给所调用的函数的形参 通过形参指针变量,改变该n个变量的值 主调函数中就可以使用这些改变了值的变量 例:输入a、b、 c3个整数,按大小顺序输出。 数组的指针是指数组的起始地址 数组元素的指针是数组元素的地址 指向数组元素的指针 用法与指向变量的指针变量相同 int,a[5],*p,*q; p=&a[0]; q=&a[3]; 指针变量与指针的运算 指针变量的赋值运算 p=&a; (将变量a地址?p) p=array; (将数组array首地址?p) p=&array[i]; (将数组元素i地址?p) p1=p2; (指针变量p2值?p1) 不能把一个整数?p,也不能把p的值?整型变量 int i,*p; *p=1000;i=p; 出现编译警告,但可以执行 指针的算术运算 p++/++p 指针后移一个单元(元素) p--/--p 指针前移一个单元(元素) p+n 指向p指针下的n个单元(元素) p-n 指向p指针上的n个单元(元素) p-q 求两指针之间单元(元素)个数 单元(元素)大小与指针的具体数据类型有关,如当指针变量的基类型为整型时,一个单元(元素)的大小为2bytes;当指针变量的基类型为浮点型时,一个单元(元素)大小为4bytes。 例: 指针的关系运算 实质是两个地址之间的比较,地址大的指针大,地址小的指针小 p>q p>=q p