


全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
c+入门学习笔记指针篇指针优点:1 为函数提供修改调用变元的手段; 2 支持C+动态分配子程序 3 可以改善某些子程序的效率 4 为动态数据结构(如二叉树、链表)提供支持 注:指针为程序引入了一层间接性,可以操控指针而不直接操控对象。 1 可操控指针内含的地址也可操控指针所指的对象 2 指针可能并不指向任何对象,写*pi时,可能会使程序在执行期错误,如寻址到某个对象,则提领操作,不指向任何对象,会出错,所以在提领前先确定它的确指向某对象.一个未指向任何对象的指针,内含地址为0,有时称为null指针,assert (p != 0)可检测是否分配成功。也可用if (pi),只有在pi含非零值时,才为true. 一、 定义:为存放内存地址的变量。诠释:指针为一数据类型也有自己的地址。占用四个字节的存储空间 int * p:&p返回的是指针p的地址,而不是所指变量的地址地址:一般指内存中另一变量的位置 二、 指针变量: type * name 声明时必须确保它的类型与要指向的对象类型兼容 const 是“最靠近”为原则指向整数常量的指针:const int * p;它所指向的值只读不能被修改 *p = 4(错误),p = 5(正确)指向一个整数的常量指针:int * const p;不允许修改指针变量的值,*p = 5 (正确),p = 5 (错误) 三、 指针操作符: &(取址运算符):一元操作符,只作用于一个操作数,返回操作数的地址 *(提领操作):一元操作符,是&的补操作,返回其操作数所指变量的值 四、 指针赋值及转换:同类型直接赋值,异类型要进行转换。强制转换:可以把表达式结果硬性转换为指定类型 char * p;(int *)p 把p强制转换为int型,记住转换过程中要注意两个类型的大小,大转小时可能会有数据丢失(如int到double)涉及void *的: c 中void *类型可赋值给任何类型的指针,反之亦然 c+ 中都需要强制转换 void *可似为无穷大能接纳任何类型赋值,反之不行int * p =9;void * t= p(正确);p=t(错误) 不涉及void *的都要强制转换 五、 指针的算术操作和整数的加法,减法,自身的增量、减量指针增量后指向下一个与指针基类同型的元素,增减单位是所指类型的长度。 六、 其他说明: 1 指针和数组:不带下标的数组名返回数组的起始地址,即数组首元素的地址,所以对数组的访问可有两种方式:数组下标和指针算术 2 函数指针:函数具有可赋给指针的物理内存地址,一个函数地址也为该函数的进入点,也是调用函数的地址3 多级指针地址*p 七、 动态内存分配定义:是程序在运行中取得内存的方法。是从堆(heap)-系统的自由内存区取得内存运算符: new(c中的malloc):自动建立一个具有合适大小的对象,返回具有正确类型的指针,如分配不成功,返回一个空指针0,且可自动调用构造函数。char * p = new char(t); delete(c中的free):delect p;释放数组对象时要使用方括号delete p; 八、 与引用的区别引用运算符:1 引用只是变量的别名,而不是指向变量的指针(区别于取址运算符&)不占内存空间,对变量引用的改变其相应的变量也会改变。2 不能对引用使用指针间接运算符“*”进行复引用操作 3 引用必须在声明时初始化int &c = count;(c是count的别名)九、 注意:在每次使用指针前,都应该初始化。以防止指针指向空对象。 应用举例(pointer.cpp) 编译环境:Window2000 Vc6.0 #include #include using namespace std; void main() /int * p =1, 不对,整型常量不能转换为整型指针,char * t =0 可以 /指针运算符&返回操作数的地址,此处&p,&q是p,q的地址 /要返回得到指向的地址要么正接用p,q 要么用&(*p),&(*q),指针也是 /是一种数据类型也有自己的内存地址为4个字节,8位int * q , * p; int x =1 ,y = 2; q = &x; p = &y; cout p &p &(*p) p *p endl; cout q &q &(*q) q *q endl; /指针赋值,整个指针包含的地址、指向的对象都改变了 int * t; t = q; q = p; p = t; cout p p *p endl; cout q q *q endl; /指针所指对象的赋值操作,地址不变 q = &x; /1 p = &y; /2 cout p p *p endl; cout q q *q endl; /强制类型转换 /double *l; /l = (double*)*q; / q的值赋给临时变量 *t=1 *t = *q; / q的值赋给临时变量 *t=1 cout *t endl; *q = *p; / q的值给q,*q=2 cout *q endl; /?*p = *t; /为什么此处*p值没有改变 *p = *t; cout *t endl; cout p p *p endl; cout q q *q endl; /引用的使用 int count = 1; int &c = count; /声明c为count的引用,c只是count的别名,不占实际内存空间 cout 引用; cout c count endl; /引用变量在声明时要初始化 /int &t; (错误) /t = count ; /不能用指针间接运算符复引用一引用,引用只是一变量的别名 /它不占地址空间 /cout *c endl; int iF = 10; const int * ciS = 0; /指向整数常量的指针,指针最好都进行初始化 int * iT = &iF; /
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 习作:写信(教学设计)-2024-2025学年语文四年级上册统编版
- 内蒙古开鲁县高中生物 第四章 细胞的物质输入和输出 4.1 物质跨膜运输教学设计 新人教版必修1
- 五年级下册英语教案-Unit 3 Review |冀教版(三起)
- 九年级历史下册 第3课 凡尔赛-华盛顿体系的建立教学设计 岳麓版
- 人教部编版八年级下册茅屋为秋风所破歌教学设计及反思
- 安全生产环保年度培训
- 大疆无人机培训内容
- 人教部编版七年级历史上第14课 沟通中外文明的“丝绸之路”教学设计
- 人教部编版三年级上册8 卖火柴的小女孩教学设计及反思
- 2024内蒙古呼伦贝尔经济技术开发区城市建设投资集团有限责任公司公开招聘8人笔试参考题库附带答案详解
- 共享农田合作合同协议书
- 风电基础合同
- 三级安全培训考试题附参考答案(完整版)
- 庄子:当我们无路可走的时候(原文)
- 02J611-2 轻质推拉钢大门
- DB51-T 3176-2024 四川省中心乡镇消防救援站建设规范
- DB11T 2279-2024 社会单位消防安全评估规范
- 养生理疗馆门店管理手册02
- 店里装修合同范本
- 酒店品牌建设与管理教案
- QB/T 2660-2024 化妆水(正式版)
评论
0/150
提交评论