网站大量收购独家精品文档,联系QQ:2885784924

[理学]C-指针-11 2.ppt

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

指 针 指针 (Pointer) 1. 指针概念 2. 指针变量和指针运算 3. 指向数组的指针 4. 指向字符串的指针 5. 指针数组和指向指针的指针 6. 指针应用程序举例 1. 指针的概念 指针表示变量等的存储地址 使用指针可以获得紧凑、高效的代码 使用指针也可能使程序晦涩难懂 指针的使用灵活方便 指针操作容易出错且难以调试 指针与数组关系密切 指针的故事 “该程序执行了非法操作,即将关闭”——这种错误绝大部分都是指针和数组造成的 黑客攻击服务器利用的 bug绝大部分都是指针和数组造成的 有些用C的人,尽量避免使用指针 关于指针的原则 学习原则 ?复杂的应用也不建议使用 Keep it simple and stupid (KISS) 使用原则 永远要清楚每个指针指向了哪里 永远要清楚每个指针指向的地方存放的是什么 指针与地址 地址 通过首地址和数据类型可以访问内存中某一数据 数据类型决定所占用存储单元数 指针 就是地址 和类型有关 2. 指针变量和指针运算 变量的指针和指针变量 指针变量的定义 地址运算符和指针运算符 指针变量的引用 指针的运算 变量的指针和指针变量 变量的指针 变量的地址,即内存中存储某个变量的存储单元的首地址 可以通过变量的地址来间接的访问变量 指针变量 具有指针类型的变量,专门存放地址数据的变量 通过指针变量可以间接访问变量或内存数据 如何定义指针变量? 定义指针变量 int *p; 定义了一个指针变量p,简称指针p p是变量,int* 是类型 p里保存一个地址。此时这个地址是哪呢(p指向哪呢)? 指针变量初始化 p = a; *p就像普通的变量一样使用,其值是p指向的内存的内容(在上例和a等价,但寻址方式不同) p可以动态(任意)地指向不同内存,从而使*p代表不同的变量 指针变量的定义 一般形式 基类型 *指针变量名; 说明 “基类型”表示该指针指向的数据的类型 可以定义基类型为空类型void的指针变量 举例 int *pi; char *pc1, *pc2; void *p; int i,*p; p=i; 地址运算符 (Address Operator) 地址运算符 获得操作数的地址(指针) 单目运算符,自右向左结合,优先级较高 操作数应为各种类型的内存变量、数组元素、结构体成员等 操作数不能是表达式、常量、寄存器变量 举例 scanf(%f, score); int i, *p=i; 指针运算符 (Indirection Operator) 指针运算符 * 获得指针指向的内存数据 又称“间接访问运算符” 单目运算符,自右向左结合,优先级较高 操作数为具有指针(地址)意义的值 举例 int i, *p=i; (*p)++; /* i++; */ 指针变量的引用 指针变量也要“先赋值,后使用” 没有赋值的指针变量所存储的地址数据是不确定的,对它的引用非常危险 对指针的赋值要注意类型匹配,必要时可以使用强制类型转换,但要慎重使用 *p可以用于与指针p的基类型相同类型的变量可以使用的任何场合 指针变量可以作为函数的参数 指针变量引用举例 指针变量与所指变量的关系 指针的运算 运算类型 算术运算:加、减、自增、自减 关系运算:所有关系运算 赋值运算:一般赋值、加赋值、减赋值 上述运算在一定约束条件下才有意义(后详) 变量说明 p,q是同类型的指针变量 n是整型变量 指针的算术运算 条件:p,q是指向同一数据集合(数组)的指针 注意避免数组越界 指针的关系运算 条件 p,q是指向同一数据集合(数组)的指针 运算方式 pq、p=q、p==q、p!=q、p=q、pq pq:判断p所指元素是否在q所指元素之前 其他运算的含义与上述类似 若p,q不是指向同一数据集合的指针,则运算无意义 指针的赋值运算 条件 p,q是指向同一数据类型的指针 n是整型数据 有意义的赋值方式 p=q p=q+n、p=q-n (要求q指向数组) p+=n、p-=n (要求p指向数组) 注意避免数组越界 指针的运算说明 指针的运算还包括 指针运算 对指向数组的指针的下标运算 对指针变量的取地址运算 对指向结构体的指针的指向成员运算 除上述运算方式(包括约束条件)外的其他运算都没有意义 无意义的指针运算不一定会出现语法错误,但可能造成危险的操作 指针的运算举例 3. 指向数组的指针 指针与数组的关系 指向数组的指针 通过指针引用数组元素 指向二维数组的指针 指针与数组的关系 数组名是“常量指针” 数组名表示数组的首地址,因此数组名也是一种指针(地址) 数组名表示的地址(指针)不能被修改,所以称之为“常量指针” 数组的指针 数组的起始地址 与数组名表示的指针相同 与数组的第一个元素(a[0])的地址相同 数组和

文档评论(0)

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

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

1亿VIP精品文档

相关文档