第6章指针与引用 本章导读 指针是C语言中的一个重要的概念,也是C语言的一个重要特色。正确 而灵活地迳用它,可以有效地表示复杂的数据结枃;能动态分配内存 据言程设计 能方便地使用字符串;有效而方便地使用数组,能直接处理内存地址等, 这对设计系统件是很必要的。掌握指针的应用,可以使程序简洁、紧凑、 高效。每一个学习和使用C语言的人,都应当深入地学习和掌握指针。 可以说,不掌握指针就不掌握C的精华。。 中本章主要知识点 (1)关于指针的C程序实例 (2)指针 60 (3)指针与数组 (4)指针与函数 (5)多级指针与指针数组 环 (6)内存管理 境 返回本书目录 (7)引用
本章导读 指针是C 语言中的一个重要的概念,也是C 语言的一个重要特色。正确 而灵活地运用它,可以有效地表示复杂的数据结构;能动态分配内存; 能方便地使用字符串;有效而方便地使用数组,能直接处理内存地址等, 这对设计系统件是很必要的。掌握指针的应用,可以使程序简洁、紧凑、 高效。每一个学习和使用C 语言的人,都应当深入地学习和掌握指针。 可以说,不掌握指针就不掌握C的精华。。 《 C 语 言 程 序 设 计 》(Visual C++ .6 0 环 境 ) 返回本书目录 第6章 指针与引用 本章主要知识点 (1) 关于指针的C程序实例 (2) 指针 (3)指针与数组 (4) 指针与函数 (5) 多级指针与指针数组 (6) 内存管理 (7)引用
第6章指针与引用 器61关于指针的C视序实例 6.2指针 程 序 6.3指针与数组 计64指针与函数 6.5多级指针与指针数组 60 6.6引用 6.7内存管理 环 境 返回本章导读
第6章 指针与引用 《 C 语 言 程 序 设 计 》(Visual C++ .6 0 环 境 ) 返回本章导读 6.2 指针 6.3 指针与数组 6.5 多级指针与指针数组 6.4 指针与函数 6.1 关于指针的C程序实例 6.6 引用 6.7 内存管理
6.1关于指针的C程序实例 懵611C程序实例 60
《 C 语 言 程 序 设 计 》(Visual C++ .6 0 环 境 ) 返回本章目录 6.1.1 C程序实例 6.1 关于指针的C程序实例
61.1C程序实例 1.C程序实例(1) 程 2.C程序实例(2) 60 环 境 返回本节目录
《 C 语 言 程 序 设 计 》(Visual C++ .6 0 环 境 ) 返回本节目录 2. C程序实例(2) 1. C程序实例(1) 6.1.1 C程序实例
61.1C程序实例(1) 1C程序实例1 据言程设计 【例61】指针变量的定义示例。 /程序名为151cpp /*程序功能:验证指针变量的定义* ino i int num int=12 *定义一个指向mt型数据的指针变量pimt* float num f3. 14, ' p f, *定义一个指向fot型数据的指针变量pf*/ char num chp,, *p ch /*定义一个指向cha型数据的指针变量pch* p int=&num int /*取变量 num Int的地址,赋值给pnt+/ p f&num f *取变量num的地址,赋值给pf* p ch=&num ch, /*取变量 num ch的地址,赋值给pch* printf(" num int=%d, p int=%dn, num int, *p int); printf(num f%04.2f *p f%4.2fn', num f, p f; printf("num ch=%oc, p ch=%cn, num ch, p ch) 60 程序运行结果: num int=12, p int=12 numf3.14,*pf3.14 程序演刁 num ch=p, p ch=p 环 境 返回本节目录
6.1.1 C程序实例(1) 《 C 语 言 程 序 设 计 》(Visual C++ .6 0 环 境 ) 返回本节目录 1.C程序实例1 【例6.1】指针变量的定义示例。 /*程序名为l5_1.cpp */ /*程序功能:验证指针变量的定义*/ main() { int num_int=12, *p_int; /*定义一个指向int型数据的指针变量p_int */ float num_f=3.14, *p_f; /*定义一个指向float型数据的指针变量p_f */ char num_ch=’p’, *p_ch; /*定义一个指向char型数据的指针变量p_ch */ p_int=&num_int; /*取变量num_int的地址,赋值给p_int */ p_f=&num_f; /*取变量num_f的地址,赋值给p_f */ p_ch=&num_ch; /*取变量num_ch的地址,赋值给p_ch */ printf(“num_int=%d, *p_int=%d\n”, num_int, *p_int); printf(“num_f=%4.2f, *p_f=%4.2f\n”, num_f, *p_f); printf(“num_ch=%c, *p_ch=%c\n”, num_ch, *p_ch); } 程序运行结果: num_int=12, *p_int=12 num_f=3.14, *p_f=3.14 num_ch=p, *p_ch=p 程序演示
例61程序渡示 a 16 1- icrosoft Visual C++- [161. cppI B File Edit View Insert Project Build Tools Window Help [Globals [All global members main 多幽! N“D:\C语言程序设计L6111611 Debug1161.exe 6mm,.+m2 /*定 单击运行 nch=p,米pch=p ess any key to continue 取变 取 取变 弹出运行 结果窗口 日C|ass↓ A 输入源程序 1101.exe-0 error(s),2 warning(s) 4 MBuild/ Debug Find in Files〈」 返回例题 Ln 1. col 2 REC ICOL 返回本节目录
[例6.1]程序演示 单击运行 输入源程序 弹出运行 结果窗口 返回例题 返回本节目录
611C程序实例(2) a2.C程序实例2 【例6.2】输入2个整数,按升序(从小到大排序)输出。 /*程序名为5_2cpp* 程 程序功能:使用指针变量求解2个整数的升序输出* 序 i int numl, num2 int*numl _ p=&numl, *num2_p=&num2, *pointer printf("Input the first number: 2) scanf(%,, numl _p) printf(" Input the second number: ) scanf( %od, num2_p) printf( numl=%d, num2=%odn, numl, num2); f* numI p>*num2p)/如果num>num2,则交换指针* pointer= numI p; numI_ p=num2_p; num2_p=pointer; j 60 printf(" min=%od, max%d\n*numl _p, *num2_P); 程序运行情况 Input the first number: 2 Input the second number: 6 环 num1=9. num2=6 境 min=6 max=9 返回本节目录
6.1.1 C程序实例(2) 《 C 语 言 程 序 设 计 》(Visual C++ .6 0 环 境 ) 2.C程序实例2 【例6.2】输入2个整数,按升序(从小到大排序)输出。 /*程序名为l5_2.cpp */ /*程序功能:使用指针变量求解2个整数的升序输出*/ main() { int num1,num2; int *num1_p=&num1, *num2_p=&num2, *pointer; printf(“Input the first number: ”); scanf(“%d”,num1_p); printf(“Input the second number: ”); scanf(“%d”,num2_p); printf(“num1=%d, num2=%d\n”, num1, num2); if( *num1_p > *num2_p ) /*如果num1>num2,则交换指针*/ { pointer= num1_p; num1_p= num2_p; num2_p=pointer; } printf(“min=%d, max=%d\n”, *num1_p, *num2_p); } 程序运行情况: Input the first number:9 Input the second number:6 num1=9, num2=6 min=6, max=9 返回本节目录 程序演示
「例62程序渡示 162-夏 ft Y File Edit View Insert Project Build Tools Window Help 自a副原电启 [Globals) (All global memb ain 延“D:VC语言程序设计162162ebug162.exe t the first numb 单击运行 Input the second number: 6 =6 in=6. max=9 Press any key to continue ber. mber 弹出运行 结果窗口 日C , num1 162.exe -g error(s),1 warning(s) 输入源程序 KDN Build/ Debug X Find in Files ill Ln 1. Col 19 REC COL OVR READ 返回例题 返回本节目录
[例6.2]程序演示 单击运行 输入源程序 弹出运行 结果窗口 返回例题 返回本节目录
62指针 据言程设计 言6.2.1地址和指针的概念 62.2指向变量的指针变量 60
《 C 语 言 程 序 设 计 》(Visual C++ .6 0 环 境 ) 返回本章目录 6.2.2 指向变量的指针变量 6.2.1 地址和指针的概念 6.2 指针
62.1地址和指针的概念 1内存地址一内存中存储单元的编号 (1)计算机硬件系统的内存储器中,拥有大量的存储单元(每个存储单元容量为1字节)。 为了方便管理,必须为每一个存储单元编号,这个编号就是存储单元的“地址”。每个存储单 程 元都有一个惟一的地址。 序 (2)在地址所标识的存储单元中存放数据。 注意:内存单元的地址与内存单元中的数据是两个完全不同的概念。 计2变量地址一系统分配给变量的内存单元的起始地址 假设有这样一个程序: i int num; scant(%od",&num) 60 printf("num=%dIn", num); C编译程序编译到该变量定义语句时,将变量num登录到“符号表”中。符号表的关键属性有 两个:一是“标识符名(id)”,二是该标识符在内存空间中的“地址(addr)”。 环 为描述方便,假设系统分配给变量mum的2字节存储单元为3000和3001,则起始」 境 变量num在内存中的地址。 返回本节目录
6.2.1 地址和指针的概念 《 C 语 言 程 序 设 计 》(Visual C++ .6 0 环 境 ) 1.内存地址──内存中存储单元的编号 2.变量地址──系统分配给变量的内存单元的起始地址 (1)计算机硬件系统的内存储器中,拥有大量的存储单元(每个存储单元容量为1字节)。 为了方便管理,必须为每一个存储单元编号,这个编号就是存储单元的“地址”。每个存储单 元都有一个惟一的地址。 (2)在地址所标识的存储单元中存放数据。 注意:内存单元的地址与内存单元中的数据是两个完全不同的概念。 假设有这样一个程序: main() { int num; scanf("%d",&num); printf("num=%d\n", num); } C编译程序编译到该变量定义语句时,将变量num 登录到“符号表”中。符号表的关键属性有 两个:一是“标识符名(id)”,二是该标识符在内存空间中的“地址(addr)”。 为描述方便,假设系统分配给变量num的2字节存储单元为3000 和3001,则起始地址3000就是 变量num在内存中的地址。 返回本节目录