Hinc lude (math. h> 第七章 tdefine Eps void main doub 定义函数原型说明 scan %f doub n double erm while( fab n=n+1; 信息科学技术学院C语言程序设计教学组
C Programming Language>第七章 第七章概述 大内容提要 指针概念与数据访问方式指针概念 指针变量和指针运算 >指针变量和指针运算 指向数组、字符串的指针 指针与数组 字符数组与指针 设 动态申请存储空间 >动态申请存储空间 指针数组和指向指针的指针 指针数组 返回指针的函数 返回指针的函数 U bajia( ustc, odILcm 8:
第七章 概述 ★ 内容提要: 指针概念与数据访问方式 指针变量和指针运算 指向数组、字符串的指针 动态申请存储空间 指针数组和指向指针的指针 返回指针的函数 ➢ 指针概念 ➢ 指针变量和指针运算 ➢ 指针与数组 ➢ 字符数组与指针 ➢ 动态申请存储空间 ➢ 指针数组 ➢ 返回指针的函数
C Programming Language>第七章 指针是语言中的一个重要的概念,也是语 言的一个重要特色。正确而灵活地运用指备 1)可以有效地表示复杂的数据结构; (2)实现动态分配存储空间; (3)能方便地使用字符串; 设 (4)有效而方便地使用数组; (5)在调用函数时使能得到多于一个的值 (6)能直接处理内存地址等。 U bajia( ustc, odILcm 8:
指针是C语言中的一个重要的概念,也是C语 言的一个重要特色。正确而灵活地运用指针: ⑴ 可以有效地表示复杂的数据结构; ⑶ 能方便地使用字符串; ⑵ 实现动态分配存储空间; ⑷ 有效而方便地使用数组; ⑸ 在调用函数时使能得到多于一个的值; ⑹ 能直接处理内存地址等
C Programming Language>第七章 [例10-1数据存取访问方式与指针 存储单元 地址 变量 void minot 2000 3 存 存取方 int i, j, k,*i pointer; 放 式可称 scanf(%d%d”,i,&j); 20046 整 访问 数 方式 k=i计+j; 20083k/值 按地 printf(“%dm”,); 存取方 i pointer=&i; 式可称 pointer, 3000 pointer 访问 2000 方式 printf(“%dn”,k) 存放整数 存储单元 的地址 U bajia( ustc, odILcm 8:
void main(){ int i, j, k, *i_pointer; scanf(“%d%d”, &i, &j); k=i+j; printf(“%d\n”, k); i_pointer=&i; k=*i_pointer; printf(“%d\n”, k); } … … … … 2000 2004 2008 3000 地址 存储单元 变量 i j k i_pointer … … … … 2000 2004 2008 3000 地址 存储单元 变量 i j k i_pointer 存 放 整 数 值 存放整数 存储单元 的地址 [例10-1]数据存取访问方式与指针 9 6 按变量 3 存取方 式可称 “ 直 接 访 问 ” 方式 2000 按地址 存取方 式可称 “ 间 接 访 问 ” 方式 3
C Programming Language>第七章 71指针的概念 由于通过地址能找到所需的变量存储单元, 从而存取其中的数据,故可以说: 地址指向该变量单元; 一个变量的地址可称为该变量的“指针” √因此若一个变量用于存放其它变量的地址(指针), 就称该变量为“指针变量”,简称为指针。 U≤ bajia( ustc,odILcnb#a
C Programming Language>第七章 指针变量所包含的是内存地址,而该 地址便是另一个变量在内存中的存储位 置。指针就是地址,通过指针可以达到 间接存取目标的目的 要正确区分: 外指针与指针变量这两个概念 U bajia( ustc, odILcm 8:
指针变量所包含的是内存地址,而该 地址便是另一个变量在内存中的存储位 置 。指针就是地址,通过指针可以达到 间接存取目标的目的。 要正确区分: 指针与指针变量这两个概念!
C Programming Language>第七章 72指针运算符“&”和“” “&”:取地址符,其操作数可以是各种类型 的简单变量、数组元素、结构成员,不能用于 表达式、常量和寄存器变量,是描述变量地址 的工具。属单目运算符。如: ntx; scanf(“%”,&x); 设 给出变量的存储单元的地址,作为 存放键盘输入数据的指针,将数据存 入变量x的存储单元之中 U bajia( ustc, odILcm 8:
7.2 指针运算符“&”和“*” “&”:取地址符,其操作数可以是各种类型 的简单变量、数组元素、结构成员,不能用于 表达式、常量和寄存器变量,是描述变量地址 的工具。属单目运算符。如: int x; scanf(“%d”, &x ); 给出变量的存储单元的地址,作为 存放键盘输入数据的指针,将数据存 入变量x的存储单元之中
C Programming Language>第七章 “*”:指针运算符(或称“间接访问”运算 符)。属单目运算符。作用 ◎定义说明指针变量。 int i k,米 pointer; 设 当指针运算符出现在定义说明语句中时, 说明其后的标识符为存放地址的变量,系统 为其分配相应的存储单元。 U≤ bajia( ustc, odILcm 8:
“*”:指针运算符(或称“间接访问”运 算 符)。属单目运算符。 作用: 定义说明指针变量。 当指针运算符出现在定义说明语句中时, 说明其后的标识符为存放地址的变量,系统 为其分配相应的存储单元。 int i, j, k, *i_pointer;
C Programming Language>第七章 “*”:指针运算符(或称“间接访问”运算 符)。属单目运算符。作用 ◎通过其操作数(指针)实现“间接访问”存 储单元的数据 i pointer=&i, k =*i pointer 设 是将指针 i pointer所指的存储单元的内容赋给变量k ,实际上是对变量i的间接存取。* pointer意为指 针变量 i_pointer.所指的变量,相当于变量代表值。 U bajia( ustc, odILcm 8:
“*”:指针运算符(或称“间接访问”运 算 符)。属单目运算符。 作用: 通过其操作数(指针)实现“间接访问”存 储单元的数据。 是将指针i_pointer所指的存储单元的内容赋给变量k ,实际上是对变量i的间接存取。*i_pointer意为指 针变量i_pointer所指的变量,相当于变量i代表值。 i_pointer=&i; k = *i_pointer;
C Programming Language>第七章 k=*i point 等价 k=i 只是存取方式不同 * i pointer可出现在变量能出现的任何地方。 k=(* 1 point)++;<等价k=i++; 只是存取方式不同 此*要求其操作教具有指针意义的值 U bajia( ustc, odILcm 8:
*i_pointer可出现在变量i能出现的任何地方。 ‘*’要求其操作数具有指针意义的值! k *i_point; k i; = ⎯⎯⎯→ = 等价 只是存取方式不同 k *i_point; k i; = ⎯⎯⎯→ = 等价 只是存取方式不同 k *i_point) ; k i ; = ( + + ⎯⎯⎯⎯→ = + + 等价 只是存取方式不同 k *i_point) ; k i ; = ( + + ⎯⎯⎯⎯→ = + + 等价 只是存取方式不同