c语言指针教程ppt课件

上传人:钟*** 文档编号:4973368 上传时间:2020-01-16 格式:PPT 页数:55 大小:236KB
返回 下载 相关 举报
c语言指针教程ppt课件_第1页
第1页 / 共55页
c语言指针教程ppt课件_第2页
第2页 / 共55页
c语言指针教程ppt课件_第3页
第3页 / 共55页
点击查看更多>>
资源描述
第9章指针 指针是 语言中的重要概念 也是 语言的重要特色 使用指针 可以使程序更加简洁 紧凑 高效 9 1指针和指针变量的概念9 2指针变量的定义与应用9 3数组的指针和指向数组的指针变量9 4字符串的指针和指向字符串的指针变量9 5返回指针值的函数9 6指针数组与主函数main 的形参9 7函数的指针和指向函数的指针变量 1 9 1指针和指针变量的概念 1 内存地址 内存中存储单元的编号 1 计算机硬件系统的内存储器中 拥有大量的存储单元 容量为 字节 为了方便管理 必须为每一个存储单元编号 这个编号就是存储单元的 地址 每个存储单元都有一个惟一的地址 2 在地址所标识的存储单元中存放数据 注意 内存单元的地址与内存单元中的数据是两个完全不同的概念 2 变量地址 系统分配给变量的内存单元的起始地址假设有这样一个程序 2 main intnum scanf d 时 存取变量num值的方式可以有两种 3 1 直接访问 直接利用变量的地址进行存取1 上例中scanf d num 的执行过程是这样的 用变量名num作为索引值 检索符号表 找到变量num的起始地址3000 然后将键盘输入的值 假设为 送到内存单元3000和3001中 此时 变量num在内存中的地址和值 如图9 1所示 2 printf num d n num 的执行过程 与scanf 很相似 首先找到变量num的起始地址3000 然后从3000和3001中取出其值 最后将它输出 2 间接访问 通过另一变量访问该变量的值 语言规定 在程序中可以定义一种特殊的变量 称为指针变量 用来存放其它变量的地址 4 例如 假设定义了这样一个指针变量num pointer 它被分配到4000 4001单元 其值可通过赋值语句 num pointer num 得到 此时 指针变量num pointer的值就是变量num在内存中的起始地址3000 如图9 1所示 通过指针变量num pointer存取变量num值的过程如下 首先找到指针变量num pointer的地址 4000 取出其值3000 正好是变量num的起始地址 然后从3000 3001中取出变量num的值 3 3 两种访问方式的比较两种访问方式之间的关系 可以用某人甲 系统 要找某人乙 变量 来类比 一种情况是 甲知道乙在何处 直接去找就是 即直接访问 另一种情况是 甲不知道乙在哪 但丙 指针变量 知道 此时甲可以这么做 先找丙 从丙处获得乙的去向 然后再找乙 即间接访问 5 4 指针与指针变量 1 指针 即地址一个变量的地址称为该变量的指针 通过变量的指针能够找到该变量 2 指针变量 专门用于存储其它变量地址的变量指针变量num pointer的值就是变量num的地址 指针与指针变量的区别 就是变量值与变量的区别 3 为表示指针变量和它指向的变量之间的关系 用指针运算符 表示 例如 指针变量num pointer与它所指向的变量num的关系 表示为 num pointer 即 num pointer等价于变量num 因此 下面两个语句的作用相同 num 3 将3直接赋给变量num num pointer 将3赋给指针变量num pointer所指向的变量 Return 6 9 2指针变量的定义与应用 9 2 1指针变量的定义与相关运算 案例9 1 指针变量的定义与相关运算示例 案例代码文件名 AL9 1 C main intnum int 12 p int 定义一个指向int型数据的指针变量p int floatnum f 3 14 p f 定义一个指向float型数据的指针变量p f charnum ch p p ch 定义一个指向char型数据的指针变量p ch p int 程序演示 7 程序运行结果 num int 12 p int 12num f 3 14 p f 3 14num ch p p ch p程序说明 1 头三行的变量定义语句 指针变量的定义与一般变量的定义相比 除变量名前多了一个星号 指针变量的定义标识符 外 其余一样 数据类型 指针变量 指针变量2 注意 此时的指针变量p int p f p ch 并未指向某个具体的变量 称指针是悬空的 使用悬空指针很容易破坏系统 导致系统瘫痪 8 2 中间三行的赋值语句 取地址运算 取地址运算的格式 变量例如 num int num f num ch的结果 分别为变量num int num f num ch的地址 注意 指针变量只能存放指针 地址 且只能是相同类型变量的地址 例如 指针变量p int p f p ch 只能分别接收int型 float型 char型变量的地址 否则出错 3 后三行的输出语句 指针运算 使用直接访问和间接访问两种方式 分别输出变量num int num f num ch的值 注意 这三行出现在指针变量前的星号 是指针运算符 访问指针变量所指向的变量的值 而非指针运算符 9 案例9 2 使用指针变量求解 输入2个整数 按升序 从小到大排序 输出 案例代码文件名 AL9 2 C 程序功能 使用指针变量求解2个整数的升序输出 main intnum1 num2 int num1 p 程序演示 10 程序运行情况 Inputthefirstnumber 9 Inputthesecondnumber 6 num1 9 num2 6min 6 max 9程序说明 1 第5行的if语句如果 num1 p num2 p 即num1 num2 则交换指针 使num1 p指向变量num2 较小值 num2 p指向变量num1 较大值 2 printf min d max d n num1 p num2 p 语句 通过指针变量 间接访问变量的值 11 本案例的处理思路是 交换指针变量num1 p和num2 p的值 而不是变量num1和num2的值 变量num1和num2并未交换 仍保持原值 最后通过指针变量输出处理结果 9 2 2指针变量作函数参数1 指针变量 既可以作为函数的形参 也可以作函数的实参 2 指针变量作实参时 与普通变量一样 也是 值传递 即将指针变量的值 一个地址 传递给被调用函数的形参 必须是一个指针变量 注意 被调用函数不能改变实参指针变量的值 但可以改变实参指针变量所指向的变量的值 12 案例9 3 使用函数调用方式改写 案例9 2 要求实参为指针变量 案例代码文件名 AL9 3 C exchange 功能 交换2个形参指针变量所指向的变量的值 形参 2个 均为指向整型数据的指针变量 返回值 无 voidexchange int pointer1 int pointer2 inttemp temp pointer1 pointer1 pointer2 pointer2 temp 主函数main main intnum1 num2 定义并初始化指针变量num1 p和num2 p int num1 p 13 printf Inputthefirstnumber scanf d num1 p printf Inputthesecondnumber scanf d num2 p printf num1 d num2 d n num1 num2 if num1 p num2 p 即num1 num2 exchange num1 p num2 p 指针变量作实参 输出排序后的num1和num2的值 printf min d max d n num1 num2 程序演示 程序运行情况 Inputthefirstnumber 9 Inputthesecondnumber 6 num1 9 num2 6min 6 max 9 14 调用函数exchange 之前 之时 结束时和结束后的情况 如图9 5所示 形参指针变量pointer1 指向变量num1 和pointer2 指向变量num2 在函数调用开始时才分配存储空间 函数调用结束后立即被释放 虽然被调用函数不能改变实参指针变量的值 但可以改变它们所指向的变量的值 总结 为了利用被调用函数改变的变量值 应该使用指针 或指针变量 作函数实参 其机制为 在执行被调用函数时 使形参指针变量所指向的变量的值发生变化 函数调用结束后 通过不变的实参指针 或实参指针变量 将变化的值保留下来 15 案例9 4 输入3个整数 按降序 从大到小的顺序 输出 要求使用变量的指针作函数调用的实参来实现 案例代码文件名 AL9 4 C exchange 功能 交换2个形参指针变量所指向的变量的值 形参 2个 均为指向整型数据的指针变量 返回值 无 voidexchange int pointer1 int pointer2 inttemp temp pointer1 pointer1 pointer2 pointer2 temp 16 主函数main main intnum1 num2 num3 从键盘上输入3个整数 printf Inputthefirstnumber scanf d 程序演示 17 程序运行情况 Inputthefirstnumber 9 Inputthesecondnumber 6 Inputthethirdnumber 12 num1 9 num2 6 num3 12排序结果 12 9 6 Return 18 9 3数组的指针和指向数组的指针变量 9 3 1概述1 概念数组的指针 数组在内存中的起始地址 数组元素的指针 数组元素在内存中的起始地址 2 指向数组的指针变量的定义指向数组的指针变量的定义 与指向普通变量的指针变量的定义方法一样 例如 intarray 10 pointer array 或注意 数组名代表数组在内存中的起始地址 与第1个元素的地址相同 所以可以用数组名给指针变量赋值 19 3 数组元素的引用数组元素的引用 既可用下标法 也可用指针法 使用下标法 直观 而使用指针法 能使目标程序占用内存少 运行速度快 9 3 2通过指针引用数组元素如果有 intarray 10 pointer array 则 1 pointer i和array i都是数组元素array i 的地址 如图9 6所示 2 pointer i 和 array i 就是数组元素array i 3 指向数组的指针变量 也可将其看作是数组名 因而可按下标法来使用 例如 pointer i 等价于 pointer i 注意 pointer 1指向数组的下一个元素 而不是简单地使指针变量pointer的值 1 其实际变化为pointer 1 size size为一个元素占用的字节数 例如 假设指针变量pointer的当前值为3000 则pointer 1为3000 1 2 3002 而不是3001 20 案例9 5 使用指向数组的指针变量来引用数组元素 案例代码文件名 AL9 5 C 程序功能 使用指向数组的指针变量来引用数组元素 main intarray 10 pointer array i printf Input10numbers for i 0 i 10 i scanf d pointer i 使用指针变量来输入数组元素的值 printf array 10 for i 0 i 10 i printf d pointer i 使用指向数组的指针变量输出数组 printf n 程序演示 程序运行情况 Input10numbers 0123456789 array 10 0123456789 21 程序说明 程序中第3行和第6行的2个for语句 等价于下面的程序段 for i 0 i 10 i pointer scanf d pointer printf array 10 pointer array 使pointer重新指向数组的第一个元素 for i 0 i 10 i pointer printf d pointer 思考题 1 如果去掉 pointer array 行 程序运行结果会如何 请上机验证 2 在本案例中 也可以不使用i来作循环控制变量 程序怎么修改 提示 指针可以参与关系运算 22 说明 1 指针变量的值是可以改变的 所以必须注意其当前值 否则容易出错 2 指向数组的指针变量 可以指向数组以后的内存单元 虽然没有实际意义 3 对指向数组的指针变量 px和py 进行算术运算和关系运算的含义1 可以进行的算术运算 只有以下几种 px n px px px px px py px n 将指针从当前位置向前 n 或回退 n n个数据单位 而不是n个字节 显然 px px和px px是px n的特例 n 1 px py 两指针之间的数据个数 而不是指针的地址之差 23 2 关系运算表示两个指针所指地址之间 位置的前后关系 前者为小 后者为大 例如 如果指针px所指地址在指针py所指地址之前 则px py的值为1 9 3 3再论数组作函数参数数组名作形参时 接收实参数组的起始地址 作实参时 将数组的起始地址传递给形参数组 引入指向数组的指针变量后 数组及指向数组的指针变量作函数参数时 可有 种等价形式 本质上是一种 即指针数据作函数参数 1 形参 实参都用数组名 2 形参 实参都用指针变量 3 形参用指针变量 实参用数组名 4 形参用数组名 实参用指针变量 24 9 3 42维数组的指针及其指针变量1 2维数组的指针假设有如下数组定义语句 intarray 3 4 1 从2维数组角度看 数组名array代表数组的起始地址 是一个以行为单位进行控制的行指针 array i 行指针值 指向2维数组的第i行 array i 列 指针值 指向第i行第 列 控制由行转为列 但仍为指针 array i 数组元素array i 0 的值 用array作指针访问数组元素array i j 的格式 array i j 注意 行指针是一个 级指针 如图9 7所示 2 从1维数组角度看 数组名array和第1维下标的每一个值 共同构成一组新的1维数组名array 0 array 1 array 2 它们均由4个元素组成 25 语言规定 数组名代表数组的地址 所以array i 是第i行1维数组的地址 它指向该行的第0列元素 是一个以数组元素为单位进行控制的列指针 array i j 列 指针值 指向数组元素array i j array i j 数组元素array i j 的值 如果有 intarray 3 4 p array 0 则p 1指向下一个元素 如图9 8所示 用p作指针访问数组元素array i j 的格式 p 每行列数 j 2 行指针变量 指向由n个元素组成的一维数组的指针变量 1 定义格式数据类型 指针变量 n 26 注意 指针变量 外的括号不能缺 否则成了指针数组 数组的每个元素都是一个指针 指针数组 本章第6节介绍 2 赋值行指针变量 2维数组名 行指针变量 案例9 6 使用行指针和列指针两种方式输出2维数组的任一元素 1 使用行指针 案例代码文件名 AL9 6 1 C 程序功能 使用行指针输出2维数组的任一元素 main intarray 3 4 1 2 3 4 5 6 7 8 9 10 11 12 int pointer 4 row col pointer array printf Inputrow scanf d 27 printf array 1d 1d d n row col pointer row col 程序演示 程序运行情况 Inputrow 1 Inputcol 2 array 1 2 7思考题 本题也可以直接使用数组名array作指针 应如何修改 2 使用列指针 案例代码文件名 AL9 6 2 C 程序功能 使用列指针输出2维数组的任一元素 main intarray 3 4 1 2 3 4 5 6 7 8 9 10 11 12 int pointer row col 定义一个 列 指针变量pointer pointer array 0 给 列 指针变量pointer赋值 printf Inputrow scanf d 程序演示 28 3 2维数组指针作函数参数2维数组的指针作函数实参时 有列指针和行指针两种形式 相应的 用来接受实参数组指针的形参 必须使用相应形式的指针变量 如下所示 实参 列指针行指针 形参 列 指针变量行指针变量9 3 5动态数组的实现在程序运行过程中 数组的大小是不能改变的 这种数组称为静态数组 静态数组的缺点是 对于事先无法准确估计数据量的情况 无法做到既满足处理需要 又不浪费内存空间 所谓动态数组是指 在程序运行过程中 根据实际需要指定数组的大小 在C语言中 可利用内存的申请和释放库函数 以及指向数组的指针变量可当数组名使用的特点 来实现动态数组 29 动态数组的本质是 一个指向数组的指针变量 案例9 7 动态数组的实现 案例代码文件名 AL9 7 C 程序功能 实现动态数组 include alloc h include stdlib h main int array NULL num i printf Inputthenumberofelement scanf d exit 终止程序运行 返回操作系统 30 提示输入num个数据 printf Input delements num for i 0 i num i scanf d 释放由malloc 函数申请的内存块 程序演示 程序运行情况 Inputthenumberofelement 3 Input3elements 123 3elementsare 1 2 3 31 程序说明 1 array int malloc sizeof int num 语句 malloc 函数和sizeof运算符1 库函数malloc 用法 void malloc unsignedsize 功能 在内存的动态存储区分配 个长度为size的连续空间 返回值 申请成功 则返回新分配内存块的起始地址 否则 返回NULL 函数原型 alloc h stdlib h malloc 函数的返回值是一个无类型指针 其特点是可以指向任何类型的数据 但在实际使用malloc 函数时 必须将其返回值强制转换成被赋值指针变量的数据类型 以免出错 2 运算符sizeof 格式 sizeof 变量名 类型名 功能 求变量 类型占用的内存字节数 正整数 例如 在IBM PC机上 sizeof int 2 32 思考题 在该语句中 使用sizeof int 求出1个int型数据占用的内存字节数 而不是使用常量 2 为什么 2 scanf d 语句 b 在该语句中的作用是 使光标定位到最后一个数据后的分隔符 上 然后再输出一个空格 以达到删除之目的 33 4 free array 语句 库函数free 用法 voidfree void ptr 功能 释放由ptr指向的内存块 ptr是调用malloc 函数的返回值 返回值 无 函数原型 stdlib h alloc h 原则上 使用malloc 函数申请的内存块 操作结束后 应及时使用free 函数予以释放 尤其是循环使用malloc 函数时 如果不及时释放不再使用的内存块 很可能很快就耗尽系统的内存资源 从而导致程序无法继续运行 Return 34 9 4字符串的指针和指向字符串的指针变量 字符串在内存中的起始地址称为字符串的指针 可以定义一个字符指针变量指向一个字符串 9 4 1字符串的表示与引用在 语言中 既可以用字符数组表示字符串 也可用字符指针变量来表示 引用时 既可以逐个字符引用 也可以整体引用 1 逐个引用 案例9 8 使用字符指针变量表示和引用字符串 案例代码文件名 AL9 8 C main char string IloveBeijing for string 0 string printf c string printf n 程序演示 35 程序运行结果 IloveBeijing 程序说明 char string IloveBeijing 语句定义并初始化字符指针变量string 用串常量 IloveBeijing 的地址 由系统自动开辟 存储串常量的内存块的首地址 给string赋初值 该语句也可分成如下所示的两条语句 char string string IloveBeijing 注意 字符指针变量string中 仅存储串常量的地址 而串常量的内容 即字符串本身 是存储在由系统自动开辟的内存块中 并在串尾添加一个结束标志 0 36 2 整体引用 案例9 9 采取整体引用的办法 改写 案例9 8 案例代码文件名 AL9 9 C 程序功能 使用字符指针变量表示和引用字符串 main char string IloveBeijing printf s n string 程序演示 程序说明 printf s n string 语句通过指向字符串的指针变量string 整体引用它所指向的字符串的原理 系统首先输出string指向的第一个字符 然后使string自动加 使之指向下一个字符 重复上述过程 直至遇到字符串结束标志 37 注意 其它类型的数组 是不能用数组名来一次性输出它的全部元素的 只能逐个元素输出 例如 intarray 10 printf d n array 这种用法是非法的 3 字符指针变量与字符数组之比较虽然用字符指针变量和字符数组都能实现字符串的存储和处理 但二者是有区别的 不能混为一谈 1 存储内容不同 字符指针变量中存储的是字符串的首地址 而字符数组中存储的是字符串本身 数组的每个元素存放一个字符 38 2 赋值方式不同 对字符指针变量 可采用下面的赋值语句赋值 char pointer pointer Thisisaexample 而字符数组 虽然可以在定义时初始化 但不能用赋值语句整体赋值 下面的用法是非法的 charchar array 20 char array Thisisaexample 非法用法 3 指针变量的值是可以改变的 字符指针变量也不例外 而数组名代表数组的起始地址 是一个常量 而常量是不能被改变的 9 4 2字符串指针作函数参数 39 案例9 10 用函数调用方式 实现字符串的复制 案例代码文件名 AL9 10 C string copy 函数 复制一个字符串 形参 字符指针str from接收源串 字符指针str to存储目标串 返回值 无 voidstring copy char str from char str to inti 0 for str to i str from i 0 i 循环体为空语句 main chararray str1 20 Iamateacher chararray str2 20 string copy array str1 array str2 数组名作实参 printf array str2 s n array str2 程序演示 40 程序运行结果 Iamateacher 程序说明 for str to i str from i 0 i 语句的执行过程为 首先将源串中的当前字符 复制到目标串中 然后判断该字符 即赋值表达式的值 是否是结束标志 如果不是 则相对位置变量i的值增1 以便复制下一个字符 如果是结束标志 则结束循环 其特点是 先复制 后判断 循环结束前 结束标志已经复制 在C语言中 用赋值运算符 而不是赋值语句来实现赋值操作 能给某些处理带来很大的灵活性 该语句 实现字符串的复制 的用法就是最好的例证 Return 41 9 5返回指针值的函数 一个函数可以返回一个int型 float型 char型的数据 也可以返回一个指针类型的数据 返回指针值的函数 简称指针函数 的定义格式如下 函数类型 函数名 形参表 案例9 11 某数理化三项竞赛训练组有3个人 找出其中至少有一项成绩不合格者 要求使用指针函数实现 案例代码文件名 AL9 11 C seek 函数 判断是否有不合格成绩 形参 指向由3个int型元素组成的1维数组的行指针变量 返回值 1 有不合格成绩 则返回指向本行首列的一个 列 指针 2 没有有不合格成绩 返回值为指向下一行的一个 列 指针 42 int seek int pnt row 3 inti 0 pnt col 定义一个 列 指针变量pnt col pnt col pnt row 1 使pnt col指向下一行之首 作标志用 for i 3 i if pnt row i 60 某项成绩不合格 pnt col pnt row 使pnt col指向本行之首 break 退出循环 return pnt col 43 主函数main main intgrade 3 3 55 65 75 65 75 85 75 80 90 inti j pointer 定义一个 列 指针变量pointer for i 0 i 3 i 控制每个学生 pointer seek grade i 用行指针作实参 调用seek 函数 if pointer grade i 该学生至少有一项成绩不合格 输出该学生的序号和各项成绩 printf No dgradelist i 1 for j 0 j 3 j printf d pointer j printf n 程序演示 程序运行结果 No 1gradelist 556575 44 程序说明 1 主函数中的pointer seek grade i 语句调用seek 函数时 将实参grade i 行指针 的值 复制到形参pnt row 行指针变量 中 使形参pnt row指向grade数组的第i行 2 在指针函数seek 中 1 pnt col pnt row 1 语句 pnt row 1 将行指针转换为列指针 指向grade数组的第i 1行第 列 并赋值给 列 指针变量pnt col 2 if pnt row i 60 行pnt row是一个行指针 指向数组grade的第i行 pnt row使指针由行转换为列 指向数组grade的第i行 列 pnt row j的值还是一个指针 指向数组的第i行第j列 pnt row j 是一个数据 数组元素grade i j 的值 Return 45 9 6指针数组与主函数main 的形参 9 6 1指针数组1 概念数组的每个元素都是一个指针数据 指针数组比较适合用于指向多个字符串 使字符串处理更加方便 灵活 2 定义格式数据类型 数组名 元素个数 注意 与行指针变量定义格式 行指针变量 的差别 案例9 12 有若干计算机图书 请按字母顺序 从小到大输出书名 解题要求 使用排序函数完成排序 在主函数中进行输入输出 案例代码文件名 AL9 12 C 程序功能 指针数组应用示例 46 sort 函数 对字符指针数组进行排序 形参 name 字符指针数组 count 元素个数 返回值 无 voidsort char name intcount char temp p inti j min 使用选择法排序 for i 0 i0 存在更小的串 min j 保存之 if min i 存在更小的串 交换位置 temp p name i name i name min name min temp p 47 主函数main main char name 5 BASIC FORTRAN PASCAL C FoxBASE inti 0 sort name 5 使用字符指针数组名作实参 调用排序函数sort 输出排序结果 for i 5 i printf s n name i 程序演示 程序运行结果 BASICCFORTRANFoxBASEPASCAL 48 程序说明 1 实参对形参的值传递 sort name 5 voidsort char name intcount 2 字符串的比较只能使用strcmp 函数 形参字符指针数组name的每个元素 都是一个指向字符串的指针 所以有strcmp name min name j 9 6 2主函数main 的形参在以往的程序中 主函数main 都使用其无参形式 实际上 主函数main 也是可以指定形参的 案例9 13 用同一程序实现文件的加密和解密 约定 程序的可执行文件名为lock exe 其用法为 lock 其中 为加密 为解密 案例代码文件名 AL9 13 C 程序功能 带参主函数的应用示例 49 main intargc char argv charc if argc 3 printf 参数个数不对 n else c argv 1 截取第二个实参字符串的第一个字符 switch c case 执行加密 加密程序段 printf 执行加密程序段 n break case 执行解密 解密程序段 printf 执行解密程序段 n break default printf 第二个参数错误 n 程序演示 50 1 主函数main 的有参形式main intargc char argv 2 实参的来源运行带形参的主函数 必须在操作系统状态下 输入主函数所在的可执行文件名 以及所需的实参 然后回车即可 命令行的一般格式为 可执行文件名 实参 实参2 例如 本案例程序的用法 lock 在TC的集成环境下 也可直接利用Options Arguments项 输入主函数所需要的实参 只须输入各参数 相邻参数间用空格分开 可执行文件名可省略 就本案例而言 输入 即可 51 3 形参说明 1 形参argc是命令行中参数的个数 可执行文件名本身也算一个 在本案例中 形参argc的值为3 lock 文件名 2 形参argv是一个字符指针数组 即形参argv首先是一个数组 元素个数为形参argc的值 其元素值都是指向实参字符串的指针 在本案例中 元素argv 0 指向第1个实参字符串 lock 元素argv 1 指向第2个实参字符串 元素argv 2 指向第3个实参字符串 被处理的文件名 52 9 6 3指向指针的指针变量简介在 案例9 12 的主函数main 中 数组name是一个字符指针数组 即数组的每一个元素都是一个指向字符串的指针 既然name是一个数组 则它的每一个元素也同样有相应的地址 因此可以设置一个指针变量pointer 使其指向指针数组的元素 元素的值还是一个指针 称pointer为指向指针的指针变量 显然 指向指针的指针变量是一个两级的指针变量 1 指向指针的指针变量的定义数据类型 指针变量 指针变量2 2 指向指针的指针变量的赋值指针变量 指针数组名 i Return 53 9 7函数的指针和指向函数的指针变量简介 1 函数指针的概念一个函数在编译时 被分配了一个入口地址 这个地址就称为该函数的指针 可以用一个指针变量指向一个函数 然后通过该指针变量调用此函数 2 指向函数的指针变量 1 定义格式函数类型 指针变量 注意 指针变量 外的括号不能缺 否则成了返回指针值的函数 例如 int fp fp为指向int函数的指针变量 2 赋值函数名代表该函数的入口地址 因此 可用函数名给指向函数的指针变量赋值 指向函数的指针变量 注意 函数名后不能带括号和参数 函数名前的 符号是可选的 54 3 调用格式 函数指针变量 实参表 3 指向函数的指针变量作函数参数指向函数的指针变量的常用用途之一 就是将函数指针作参数 传递到其它函数 函数名作实参时 因为要缺省括号和参数 造成编译器无法判断它是一个变量还是一个函数 所以必须加以说明 函数说明的格式 与第7章中介绍的一样 注意 对指向函数的指针变量 诸如p i p p 等运算是没有意义的 Return 55
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!