资源预览内容
第1页 / 共21页
第2页 / 共21页
第3页 / 共21页
第4页 / 共21页
第5页 / 共21页
第6页 / 共21页
第7页 / 共21页
第8页 / 共21页
第9页 / 共21页
第10页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第九章 指 针回顾 2-1 q函数是程序中的一个相对独立的单元或模块q使用函数带来的好处: 程序更清晰、易维护、分模块方便设计与开发、提高代码的重用性q语言提供了极为丰富的内置函数,要使用这些 内置函数,需要在程序前包含相应的头文件q自定义函数是用户在程序中根据需要而编写的函 数回顾 2-2 q函数的结构包括:返回值类型、函数名、参数列 表、函数体q函数原型说明以便向编译器指出该函数使用什么样的格式和语法q函数调用时程序控制流将转向被调函数,被调函数执行结束时,控制流返回主调函数qreturn 语句用于向调用函数返回值4目标q理解指针的概念 q定义指针变量q掌握对指针的操作q理解指针和数组的关系 5指针简介 2-1内存10int xED53地址变量数据ED53int ptr_x指针指针 ptr_x 指向变量 x6q指针也是一个变量,只不过该变量中存储的是另 一个对象的内存地址 q如果一个变量存储另一个对象的地址,则称该变 量指向这个对象 q由于指针值是数据,指针变量可以赋值,所以一 个指针的指向在程序执行中可以改变。指针p 在 执行中某时刻指向变量x,在另一时刻也可以指向 变量y指针简介 2-27声明并初始化指针变量数据类型 *指针名;int *ptrnum;char *ptralpha; float *rate_ptr; double *p, *q; 值为NULL的指针称为空指针,这意味着,指 针并不指向任何地址。 在头文件 stdio.h 中,NULL 定义为常量。ptrnum = NULL;8与指针相关的运算符2-1int num, *ptrnum; ptrnum = 内存100numFF7Cptrnum指针FF7C9与指针相关的运算符2-2int num, *ptrnum; ptrnum = *ptrnum=15; 内存100numFF7Cptrnum指针FF7C1510指针的特点q 指针变量的命名规则和其他变量的命名规则一样q 指针不能与现有变量同名 q 指针可存放 C 语言中的任何基本数据类型、数组和其他所有高级数据结构的地址q 若指针已声明为指向某种类型数据的地址,则它不能用于 存储其他类型数据的地址q 应为指针指定一个地址后,才能在语句中使用指针11指针使用示例1 #include void main() int var = 10; int *ptr_var; ptr_var = printf(“ var 的值是: %d“, var); printf(“n var 的内存地址是: %x“, printf(“n 指针 ptr_var 的地址是: %xn“, printf(“n var 的值是: %d“, *ptr_var); printf(“n var 的地址是: %xn“, ptr_var); 内存 varptr_var1012ff7cvar的值是:10 var 的内存地址是:12ff7c12ff7c12ff78指针ptr_var的地址是:12ff78 var的值是:10 var的地址是:12ff7c12指针使用示例2 void main() int num1 = 50, num2 = 100;int *ptr1, *ptr2; ptr1 = printf(“ num1 的值是: %d“, *ptr1);printf(“n num1 的地址是: %x n“, ptr1);ptr2 = printf(“n num2 的值是: %d“, *ptr2);printf(“n num2 的地址是: %x n“, ptr2);*ptr2 = *ptr1;printf(“n 重新赋值后 num2 的值是: %d“, *ptr2);printf(“n 重新赋值后 num2 的地址是: %xn“, ptr2); 内存 num1ptr15012ff7c12ff7cnum2ptr210012ff7812ff785013int x,*ptr_x,*ptr_y; ptr_x= ptr_y = ptr_x; 指针赋值运算100xFF7Cptr_xptr_yFF7CFF7Cint a5,*pa; pa=a; a0a1a2a3a42343115046paFE60FE64FE68FE6CFE70FE6014int *ptrnum,arr_num8; ptrnum = ptrnum+;指针算术运算2-1q使用递增/递减运算符(+ 和 -)将指针递增或 递减 内存arr_num0arr_num1arr_num2arr_num3arr_num4arr_num5arr_num6arr_num71023156041491339一个类型为 T 的指针的移动, 以 sizeof(T)为移动单位。sizeof(T):判断数据类型长度15q将指针加上或者减去某个整数值ptrnum = ptrnum = ptrnum + 4; printf(“%d”,*ptrnum);ptrnum = ptrnum = ptrnum - 2 ; printf(“%d”,*ptrnum);指针算术运算 2-24160内存arr_num0arr_num1arr_num2arr_num3arr_num4arr_num5arr_num6arr_num7102315604149133916比较两个指针#include void main () int *ptrnum1, *ptrnum2; int value = 1; ptrnum1 = value += 10; ptrnum2 = if (ptrnum1 = ptrnum2) printf(“n 两个指针指向同一个地址n“); else printf(“n 两个指针指向不同的地址n“); 指针关系运算17指向数组的指针q一个数组存储在一块连续内存单元中;数组名就 是这块连续内存单元的首地址; q第 (i + 1) 个数组元素的地址可表示为 pa= / 或者 pa=a; q一个指针变量可以指向一个数组元素int *ptr,data10;ptr=data+3;/或者ptr= int i = 0; int *ptr; ptr = data; while(i 5) printf(“n 第 %d 个元素的存储地址为:%x, 值为: %dn“,i+1, ptr, *ptr); i+; ptr+; 内存data0data1data2data3data451015202512ff6c12ff7012ff7412ff7812ff7c第1个元素的存储地址为:12ff6c,值为:5 第2个元素的存储地址为:12ff70,值为:10 第3个元素的存储地址为:12ff74,值为:15第4个元素的存储地址为:12ff78,值为:20第5个元素的存储地址为:12ff7c,值为:25ptrptrptrptrptr19指向数组的指针示例2void main() char name5 = M, A, D, A, M;int flag = 1; char *start=name, *end=name+4;for(;start = end; start+, end-) if(*start != *end) flag = 0;break; if(flag) printf(“n 该字符串是回文串n“);elseprintf(“n 该字符串不是回文串n“); 内存name0name1name2name3name4MADAM该字符串是回文串startendstartendendstart20总结2-1q指针是一个变量,它存储另一个对象的内存地址q指针的声明由基本类型、星号 (*) 和变量名组成q为指针赋值,赋值运算符右侧必须是一个地址。 如果是普通变量需要在前面加一个取地址运算符 &;如果是另一个指针变量或者是一个数组,不 需要加 &运算符q运算符 * 用于返回指针指向的内存地址中存储的值21总结2-2q指针的算术运算的含义是指针的移动,将指针执 行加上或者减去一个整数值n的运算相当于指针向前或向后移动n个数据单元q指针可以执行比较相等的运算,用来判断两个指针是否指向同一个变量q指向数组的指针,存储的是数组中元素的地址。 数组data的第 (i + 1) 个元素的地址可表示为 &datai 或 (data+i)
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号