- 1、本文档共55页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Chapter-5第5章 指针
第5章 指针 皮德常 教授、博导 南京航空航天大学 信息科学与技术学院 5.1 指针的概念 例如,假设定义有如下2个变量: int num=123; char ch=A; 5.2 指针变量 存放指针或者说地址的变量就是指针变量。 一般变量的内存单元中存放的是数据,指针变量的内存单元中存放的是地址。 5.2.1 定义指针变量 例如: int *pInt ; char *pChar ; 1:指针不指向内存的0号单元。如果指针变量值为0(即NULL ),表示空指针。 2. 地址值与整型数值不同。如地址1000与整数1000。 3. 无论是何种类型的指针都占4个字节的内存空间。 5.2.2 运算符 和 * :取内存变量地址,例如: char *pChar, ch=A; pChar = ch ; 5.2.2 运算符 和 * 2. *:通过指针间接访问所指变量 char *pChar, ch1=A, ch2 ; pChar = ch1; ch2 = *pChar; *pChar = B ; 指针变量初始化: char ch=A, *pChar = ch, *p = NULL ; 5.2.2 运算符 和 * 思考: *符号的含义: 1. int num=16,*pInt=num; *pInt =123; 3. num *= 123; 5.2.3 引用指针变量 例如: 1 int x = 30 , y = 90; 2 int *p1=x , *p2 = y, *t ; 3 t = p1; p1 = p2; p2 = t; 思考:*p1、 *p2、x 和 y的值?如下形式又是多少? 1 int x = 30 , y = 90; 2 int *p1 = x , *p2 = y, t ; 3 t = *p1; *p1 = *p2; *p2 = t; 5.3 指针与数组 访问数组的方式:下标形式、指针形式。 数组要么在静态存储区中被创建,如全局数组和静态数组;要么在栈上被创建,如一般的局部数组。 数组名对应着一块内存,其地址与容量在其生命期内保持不变,只有数组的内容可以改变。 指针可以指向任意类型的内存块,它的特征是“可变”。指针比数组灵活,但也更容易出错。 5.3.1 指向数组元素的指针 数组名代表该数组的开始地址,这意味着数组名是一个指针常量,例如: int a[10]; int a[10], *p; p = a[0]; 则 p、 a 、 a[0]是一个值。 5.3.1 指向数组元素的指针 思考:下面的程序涉及指针与数组,有什么错? char str[ ] = hello; str[0] = X; cout str endl; char *p = world; p[0] = X; // 编译器查不出该错误 cout p endl; 5.3.2 指针的运算 1.指针 ± 整数值 例:int a[10], *p1, *p2; p1 = a[2]; p2 = p1 + 3; 注意如下形式,易错: int m = *p1++ , n = *++p2; 5.3.2 指针的运算 2.指针相减,例如: int *p1 ,*p2 , n , a[ ]={2, 4, 6, 8, 10}; p1 = a[1]; p2 = a[4]; n = p2 – p1 ; n = p1 – p2 ; 注意:若有指针p3,让其指向数组中间的一个元素:p3 = p1 + ( p2 – p1 ) / 2 。 5.3.2 指针的运算 3.指针比较:指向同一个数组的两个指针可进行的比较包括 ==、!=、、=、和= 5.3.3 二维数组与指针 1. 对数组的理解。 5.3.3 二维数组与指针 2.二维数组元素a[i][j]的表示 (1) a[i][j]的地址可表示为:a[i][j]、a[i]+j和 *(a+i)+j 。 (2) 元素表示为:a[i][j]、*(a[i]+j)、*(*(a+i)+j) 和 (*(a+i))[j] 5.3.3 二维数组与指针 3.行指针变量 一维数组: int b[10], *pb = b ; pb与
文档评论(0)