C语言中的指针讲义.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言中的指针讲义

 C语言中的指针与函数 A 指 针 一个指针是一个特殊变量,它的值是另一个变量的地址。 除寄存器(register)变量外,所有的变量均有地址。地址是变量在内存中存放的位置。在声明一个指针变量时,我们在变量名字前加一个星号 *。 A.1 指向变量的指针 声明字符型变量 a 和指向字符型的指针变量 p: char a=b; char *p; 此处的 p 是指针变量,p 前面的 * 用来声明 p 为一个指针,即 p 是存放一个变量地址的变量,p 指向的变量是字符型的,即 p 存放字符型变量的地址。 指针变量 p 在初始化之前,它的当前值是不定的,语句 p= a; 是将字符变量 a 的地址赋给指向字符型的指针变量 p, 符号 在这里作为一元运算符,是地址运算符,a 是求变量 a 的地址。 上述语句执行后,在 p 内存放 a 的地址,重要的是 p 与 a 的类型要匹配。 用 *p 表示指针p所指的对象,即先取出 p 中的值,得一个地址,再通过此地址得到需要的对象,因此下面的两个语句输出同样的结果’b’: printf(a is %c\n,a); printf(a is %c\n,*p); 我们可用变量的名字 a,也可用指向变量 a 的指针变量 p。这样,要将 a 内的原有值b 改成 d,可直接将 d 赋给变量 a,也可间接地使用指针变量 p,其程序片段为: p=a; /* 初始化 p */ a=d; /* 将 d 直接赋给 a */ *p=d; /*通过指针变量 p 将 d 赋给 a */ 先讨论指向数组元素的指针。 用下面语句声明一个字符型数组和一个指向字符型变量的指针: char line[100],*p; 可用下面的语句给 line 的前两个元素赋值: line[0]=a; line[1]=b; 也可用指针,先对 p 初始化使其指向数组 line 的首址: p=line[0]; /* 第 0 个元素的地址 */ 或直接写成: p=line; /* 数组名字是数组的首址 */ 然后可用下面两个语句给数组的前两个元素赋值: *p=a; *(p+1)=b; 对于每个赋值,编译程序将首先计算元素的地址: 数组名字 line即是数组的首地址,line 加上增量 0,line 加上增量 1,分别是前两个元素的地址。 连续执行下面两个语句 *p++=a; *p++=b; /* 运算符*与++的优先级相同, 结合方向是 “从右到左”*p++ 即 *(p++) */ 指针 p 将两次增1,最终指向 line[2] 的地址。 假设有整型数组和指向整型量的指针: int num[10],*q=num; q 指向 num[0]的地址, 当 q 增 1 时,q 指向 num[1]的地址,要移动 2 个或 4 个字节(依赖于不同的计算机); 而指向字符型的指针增 1 时,只移动一个字节,这就是指针变量与其指向的变量的类型必须要匹配的道理。 若两个指针指向同一数组,这两个指针也可以做比较运算。 以上讨论的是指向数组元素的指针,下面再简单介绍指向一维数组的指针: int a[3][4],(*pa)[4]; pa=a; 第一行声明的 pa 是一个指针,指向有4 个元素的一维整型数组; 第二行通过对pa赋值,使得 pa 等于 a[0][0] 的地址, pa+1 要后移4 个整数,即pa+1 指向 a[1][0] 的地址,*(pa+1)+3 指向a[1][3]的地址,*(*(pa+2)+1) 是a[2][1] 的值 。 也可建立一个指针数组,它的每个元素均是一个指针,存放地址,下面的语句 char *ap[3]; 声明 ap 是一个指向字符型的指针数组,ap 的每个元素存放一个字符串的首址。 若我们用内存动态存储区分配函数分配每个字符串的空间: ap[i]=(char *)malloc(sizeof( 字符串)); 则 ap[i] 指向分配的相应字符串区域的首址。例如: ap[0] 存放 science 的首址 ap[1] 存放 technology 的首址 ap[2] 存放 art 的首址 可以如下表示: ap[0]=(char *)malloc(sizeof( science)); ap[1]=(char *)malloc(sizeof(techonology)); ap[2]=(char *)malloc(sizeof(art)); A.4 指向结构的指针 可定义一个结构数组,然后用指针指向此数组的第一个元素,这等同于我们以前讨论的指向数组元素的指针。例如: struct exp

您可能关注的文档

文档评论(0)

441113422 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档