第10章 指针 7
第10章 指针
指针是C语言中一个十分重要的概念。 指针的引入极大地丰富了C语言的功能, 利用指针可以直接对内存中各种不同类型 的数据进行快速访问,可以有效地表示、 访问复杂的数据结构,可以方便灵活地在 函数间传递数据,可以提高某些程序的执 行效率,实现对底层硬件的访问。 7
指针是C语言中一个十分重要的概念。 指针的引入极大地丰富了C语言的功能, 利用指针可以直接对内存中各种不同类型 的数据进行快速访问,可以有效地表示、 访问复杂的数据结构,可以方便灵活地在 函数间传递数据,可以提高某些程序的执 行效率,实现对底层硬件的访问
10.1指针的基本概念 102指针变量 103数组的指针 104函数的指针和返回指针值的函数 10.5指针数组与指向指针的指针 7
10.1 指针的基本概念 10.2 指 针 变 量 10.3 数组的指针 10.4 函数的指针和返回指针值的函数 10.5 指针数组与指向指针的指针
101指针的基本概念 10.1.1变量的直接访问和间接访问 变量是程序中数据所占存储单元的符号。程 序在编译时,系统会根据变量定义的数据类型为 其分配相应的内存单元,用于存放变量的具体数 据。不同类型的变量所分配的内存单元的长度是 不一样的。通常,将变量所分配内存单元的首地买 址(即变量所分配的低字节地址)称为变量的地 址。另外,系统还产生一张“变量名、地址对应 关系表”,用来记录变量名与地址之间的关系, 每一个变量名对应一个地址。在程序中使用变量 ,就是通过“变量名、地址对应关系表”所记录 的变量地址来访问相应的内存单元,变量的值就 是内存单元的内容
10.1 指针的基本概念 10.1.1 变量的直接访问和间接访问 变量是程序中数据所占存储单元的符号。程 序在编译时,系统会根据变量定义的数据类型为 其分配相应的内存单元,用于存放变量的具体数 据。不同类型的变量所分配的内存单元的长度是 不一样的。通常,将变量所分配内存单元的首地 址(即变量所分配的低字节地址)称为变量的地 址。另外,系统还产生一张“变量名、地址对应 关系表” ,用来记录变量名与地址之间的关系, 每一个变量名对应一个地址。在程序中使用变量 ,就是通过“变量名、地址对应关系表”所记录 的变量地址来访问相应的内存单元,变量的值就 是内存单元的内容
通过变量地址可以找到该变量所占的存储单元, 因此可以说变量地址“指向”变量的存储单元。这 种直接按照变量地址访问变量的方式称为“直接访 问”,如图102所。 685_ 4000H bF---285-1400X 5000H p=-±0 5002H 7 图102变量访问方式示意图
通过变量地址可以找到该变量所占的存储单元, 因此可以说变量地址“指向”变量的存储单元。这 种直接按照变量地址访问变量的方式称为“直接访 问” ,如图10.2所示内存 。 …… a 685 4000H b 785 4002H …… p 4000H …… 5000H 5002H 图10.2 变量访问方式示意图
这种把变量地址存放在一个特殊变量中, 然后通过访问特殊变量的值(地址),再由 此地址找到最终要访问的变量的方法,称为 “间接访问”。 7
这种把变量地址存放在一个特殊变量中, 然后通过访问特殊变量的值(地址),再由 此地址找到最终要访问的变量的方法,称为 “间接访问”
1012指针与指针变量 变量的地址称为变量的指针,例如,&a的值称 为变量a的指针。 专门用来存放其他变量地址的特殊变量称为指 针变量。为了访问p所指向的变量a,通过指向运算 符“”来实现对变量的间接访问。例如, p=685; 当p指向a时,等价于“a=685;” 7
10.1.2 指针与指针变量 变量的地址称为变量的指针,例如,&a的值称 为变量a的指针。 专门用来存放其他变量地址的特殊变量称为指 针变量。为了访问p所指向的变量a,通过指向运算 符“*”来实现对变量a的间接访问。例如, *p=685; 当p指向a时,等价于“a=685;
定义另外一种特殊类型的变量。这种特殊 的变量专门用来存放其他变量的地址。例如 ntp p=&a; p=685; 定义了一个特殊变量p,假设它代表地址 5002H指向的内存单元,在该内存单元中存放了 变量a的地址 7
定义另外一种特殊类型的变量。这种特殊 的变量专门用来存放其他变量的地址。例如: int *p; p=&a; *p=685; 定义了一个特殊变量p,假设它代表地址 5002H指向的内存单元,在该内存单元中存放了 变量a的地址
102指针变量 10.21指针变量的类型和指针变量指向变量的关系 1.指针变量的定义 类型标识符*指针变量名; 其中类型标识符表示指针变量所指向数据的 类型,又称为指针变量的基类型。基类型可以是 整型、实型、字符型、数组、结构体等各种数据 类型。“※”为指针变量的定义符,表示定义的是 一个指针变量,而指针变量名本身不包含“÷” 7
10.2 指 针 变 量 10.2.1 指针变量的类型和指针变量指向变量的关系 1.指针变量的定义 类型标识符 *指针变量名; 其中类型标识符表示指针变量所指向数据的 类型,又称为指针变量的基类型。基类型可以是 整型、实型、字符型、数组、结构体等各种数据 类型。“*”为指针变量的定义符,表示定义的是 一个指针变量,而指针变量名本身不包含“*
2.指针变量的初始化 (1)在定义的同时进行初始化。 例如: int a: int*p=&a (2)赋值语句进行初始化。 例如: int a int p; p=&a 7
2.指针变量的初始化 (1)在定义的同时进行初始化。 例如: int a; int *p=&a; (2)赋值语句进行初始化。 例如: int a; int *p; p=&a;