当前位置:文档之家› 指针数组

指针数组


有关指针的数据类型和指针运算的小结 (1) )
一、有关指针的数据类型的小结 int I; 定义整型变量I 定义整型变量 int *p; p为指向整型数据的指针变量 为指向整型数据的指针变量 int a[n]; 定义整型数组a,它有n个元素 定义整型数组 ,它有 个元素 int *p[n]; 定义指针数组 ,它由 个指向整型数据的指针数 定义指针数组p,它由n个指向整型数据的指针数 据组成 int (*p)[n]; p为指向含 个元素的一维数组的指针变量 为指向含n个元素的一维数组的指针变量 为指向含 int f(); f为带回整型函数值的函数 为带回整型函数值的函数 int *p(); p为带回一个指针的函数,该指针指向整型数据 为带回一个指针的函数, 为带回一个指针的函数 int(*p)(); p为指向函数的指针,该函数返回一个整型值 为指向函数的指针, 为指向函数的指针 int **p; p是一个指针变量,他指向一个指向整型数据的指 是一个指针变量, 是一个指针变量 针变量
对指针变量 q , p 的定义: 的定义: int *q ; int **p;
指 向 指 针 的 指 针 (2) )
2、定义形式: 、定义形式: char **p;
p的前面有两个 号。*运算符的结合性是从左到右, 的前面有两个*号 运算符的结合性是从左到右, 的前面有两个 运算符的结合性是从左到右 **p相当于 相当于*(*p),显然 是指针变量的定义形式。 是指针变量的定义形式。 相当于 ,显然*p是指针变量的定义形式
一、指向指针的指针(二重指针)的概念 指向指针的指针(二重指针) 1、定义:指向指针数据的指针变量,简称为指向指针的指 、定义:指向指针数据的指针变量, 此指针中存放的是另外一个指针的地址。 针,此指针中存放的是另外一个指针的地址。 已知三个变量 a, q , p , 其中 为 int 型,p , q 为指针变量 其中a p a602 p=&q ; **p 为 a *p 为 q q ff3d a602 q=&a ; *q 为 a a 21 ff3d
指 针 数 组 作 main 函 数 的 形 参(3) )
3、echo命令: 、 命令: 命令 后面的各参数( (1)作用:实现“参数回送”,即将 )作用:实现“参数回送” 即将echo后面的各参数(各字 后面的各参数 符串)在同一行输出。 符串)在同一行输出。 (2)例题程序:(教材 )例题程序: 教材254页) 页 小结: 小结: 利用指针数组作main函数的行参,可以向程序传送命令行参 函数的行参, 利用指针数组作 函数的行参 这些参数是字符串) 这些字符串的长度不可知, 数(这些参数是字符串),这些字符串的长度不可知,而且 各参数字符串的长度一般并不相同, 各参数字符串的长度一般并不相同,命令行参数的数目也是 任意的。用指针数组可以较好的满足上述要求。 任意的。用指针数组可以较好的满足上述要求。
有关指针的数据类型和指针运算的小结 (2) )
二、指针运算小结 1. 指针变量加(减)一个整数 指针变量加( 一个指针变量加( 一个指针变量加(减)一个整数并不是简单的将指针 变量的原值加( 一个整数, 变量的原值加(减)一个整数,而是将该指针变量的 原值(是一个地址) 原值(是一个地址)和它指向的变量所占用的内存单 元字节数相加( 元字节数相加(减)。 2. 指针变量赋值:将一个变量地址赋给一个指针变量。 指针变量赋值:将一个变量地址赋给一个指针变量。 注意:不能将一个整数赋给指针变量, 注意:不能将一个整数赋给指针变量,同样不能将指针变 量的值(地址)赋给一个整型变量。 量的值(地址)赋给一个整型变量。
例10.28
使用指向指针的指针
例10.29
指针数组的元素指向整型数组
继续
指 针 数 组 作 main 函 数 的 形 参(1) )
1、定义形式 、 例如: 例如: main(argc , argv) ( ) argc , argv : main函数的形参。main函数是由系统调用的。当处于 函数的形参。 函数是由系统调用的。 函数的形参 函数是由系统调用的 操作命令状态下,输入main所在的文件名(经过编译、连接 所在的文件名( 操作命令状态下,输入 所在的文件名 经过编译、 后得到的可执行文件名) 系统就调用main函数。 函数。 后得到的可执行文件名),系统就调用 函数 实际上实参是和命令一起给出的。 实际上实参是和命令一起给出的。也就是一个命令行 中包括命令名和需要传给main函数的参数 函数的参数。 中包括命令名和需要传给 函数的参数 2、命令行的一般形式: 命令行的一般形式: 命令行的一般形式 命令名 参数1 参数2 ……参数 参数 参数 ……参数n 参数
有关指针的数据类型和指针运算的小结 (4) )
3. 使用 使用scanf函数时应注意的问题: 函数时应注意的问题: 函数时应注意的问题 函数中的“ (1)scanf函数中的“ 格式控制” 后面应当是变量地址, 而 ) 函数中的 格式控制”后面应当是变量地址, 不应是变量名。 不应是变量名。 ( 2)如果在 “ 格式控制 ” 字符串中除了格式说明以外还有 ) 如果在“ 格式控制” 其他字符, 则在输入数据时应输入与这些字符相同的字 其他字符 , 符。 格式输入时, ( 3) 在用 “ %c”格式输入时 , 空格字符和 “ 转义字符 ” 都 ) 在用“ 格式输入时 空格字符和“ 转义字符” 作为有效字符输入。 作为有效字符输入。 (4)在输入数据时,遇以下情况时该数据认为结束。 )在输入数据时,遇以下情况时该数据认为结束。 a.遇空格,或按“回车”或“跳格”(Tab)键。 遇空格, 跳格” 遇空格 或按“回车” 键 b.按指定的宽度结束。 按指定的宽度结束。 按指定的宽度结束 c.遇非法输入。 遇非法输入。 遇非法输入
指 针 数 组 (1) )
一、指针数组的概念: 指针数组的概念: 1、定义: 一个数组的各个元素均为指针类型数据, 、定义: 一个数组的各个元素均为指针类型数据, 称为指针数组, 也就是说, 指针数组中的每一个 称为指针数组 , 也就是说 , 指针数组中的 每一个 元素都相当于一个指针变量。 元素都相当于一个指针变量。 2、一维数组的定义形式: 、一维数组的定义形式: 数组名[数组长度 类型名 *数组名 数组长度 ; 数组名 数组长度] 例如: 例如:int *p[4] ; 由于[ 比 优先级高 先有p[4]形式,是数组, 优先级高, 形式, 由于 ]比*优先级高,先有 形式 是数组, 个元素。 有4个元素。再与 前面的“*”结合,“*”表示 个元素 再与p 前面的“ ”结合, ” 此数组是指针类型的,每个数组元素( 此数组是指针类型的,每个数组元素(相当于一 个指针变量) 型变量。 个指针变量)都可指向一个 int 型变量。
指 针 数 组 作 main 函 数 的 形 参(2) )
注意: 注意: (1)命令名和各参数之间用空格分开。 )命令名和各参数之间用空格分开。 函数中行参argc是指命令行中参数的个数 (2)main函数中行参 ) 函数中行参 是指命令行中参数的个数 注意: 文件名也作为一个参数) (注意: 文件名也作为一个参数)。 函数的第二个行参argv是一个指向字符串的指针 (3)main函数的第二个行参 ) 函数的第二个行参 是一个指向字符串的指针 数组,也就是说,带参数的main函数原型是 数组,也就是说,带参数的 函数原型是 main(int argc,char *argv[ ]); (4)命令行参数应当都是字符串,这些字符串的首地址构 )命令行参数应当都是字符串, 成一个指针数组。 成一个指针数组。
指注意:不要写成 注意:不要写成int(*p)[4],这是指向大小为 的一维数组 ,这是指向大小为4的一维数组 单个指针变量 指针变量。 的单个指针变量。 例10.27 将若干字符串按字母顺序(由小到大)输出。 将若干字符串按字母顺序(由小到大)输出。
指 向 指 针 的 指 针 (1) )
有关指针的数据类型和指针运算的小结 (3) )
3.指针变量可以有空值,即该指针变量不指向任何变量, 表 指针变量可以有空值,即该指针变量不指向任何变量, 指针变量可以有空值 示为: 示为: p=NULL; 4.两个指针变量可以加减 两个指针变量可以加减 5.两个指针变量比较 5.两个指针变量比较 三、void指针类型 指针类型 void类型的指针,即可以定义一个指针变量,但不指定它 类型的指针,即可以定义一个指针变量, 类型的指针 是指向哪一种数据类型。 是指向哪一种数据类型。
相关主题