Microsoft PowerPoint - 5. 指针Pointers.ppt [兼容模式]

Similar documents
没有幻灯片标题

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式]

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

Microsoft PowerPoint - 3. 函数Functionl.ppt [兼容模式]

《计算概论》课程 第十九讲 C 程序设计语言应用

《C语言程序设计》教材习题参考答案

《C语言程序设计》第2版教材习题参考答案

Microsoft PowerPoint - string_kruse [兼容模式]

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

C/C++ - 数组与指针

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

Generated by Unregistered Batch DOC TO PDF Converter , please register! 浙江大学 C 程序设计及实验 试题卷 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:3

CC213

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料

2015年计算机二级(C语言)模拟试题及答案(三)

Microsoft PowerPoint - 8. 运算符重载 Operator Overloading.pptx

Microsoft Word - 《C语言开发入门》课程教学大纲-2.doc

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf ("%d", & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf ("%d %d

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc

C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C Project 30 C Project 3 60 Project 40

第4章 栈和队列

一 关于内存 数据存储 变量分类 局部变量 全局变量 静态变量 请看下面代码, 分析变量类型? int pi = 3; int Area(int r, int *sum) { int b; static int c =0; b = pi * r * r; c += b; *sum = c; retu

威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 號 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

c_cpp

NOWOER.OM m/n m/=n m/n m%=n m%n m%=n m%n m/=n 4. enum string x1, x2, x3=10, x4, x5, x; 函数外部问 x 等于什么? 随机值 5. unsigned char *p1; unsigned long *p

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

3.1 num = 3 ch = 'C' 2

C++ 程式設計

Guava学习之Resources

c语言面试题总结.doc

Microsoft PowerPoint - 10 模板 Template.pptx

untitled

C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf ("%d", & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9

PowerPoint 演示文稿

C/C++ - 文件IO

2016 年 地 质 工 程 系 教 学 工 作 安 排 2016 学 年 我 系 将 在 总 结 过 去 工 作 的 基 础 上, 结 合 今 年 学 院 以 抓 质 量 强 内 涵 促 改 革 调 结 构 建 品 牌 细 管 理 重 过 程 为 宗 旨, 以 规 范 管 理 深 化 内 涵 为

<4D F736F F D203136BCADBBD8D2E4D3EBD1D0BEBF2E646F63>

萧山中学课程建设方案.doc


Microsoft Word - 9pinggb_A4.doc

Microsoft Word - 9pinggb_A4-f4.doc

理 论 探 索 事 业 单 位 改 革 的 五 点 思 考 余 路 [ 摘 要 ] 事 业 单 位 改 革 是 中 国 改 革 的 重 要 环 节, 其 影 响 力 和 难 度 不 亚 于 国 有 企 业 改 革 本 文 着 重 围 绕 推 进 事 业 单 位 改 革 应 考 虑 的 五 个 方 面

日 本 位 于 亚 洲 东 部, 太 平 洋 西 北 角, 是 我 国 东 方 的 一 个 岛 国 在 洪 积 世 ( 注 1) 的 大 部 分 时 期 内, 日 本 与 大 陆 相 连 大 约 在 洪 积 世 晚 期 至 冲 积 世 ( 注 2) 初 期, 日 本 各 地 发 生 海 进, 出 现

2深化教育教学改革、创新人才培养模式


Microsoft Word - 9pinggb_let.doc

实 习 上 下 点 表 格 解 释 和 相 关 纪 律 要 求 : 1 表 格 中 所 有 名 词 都 为 简 称, 包 括 医 院 名 称 四 年 级 五 年 级 各 专 业 名 称 等 所 有 时 间 都 为 学 生 装 好 行 李 出 发 时 间, 请 提 前 0 分 钟 将 行 李 运 到

3 基 金 杠 杆 从 分 级 基 金 的 概 念, 我 们 知 道 了 分 级 基 金 的 A 份 额 是 每 年 获 得 固 定 收 益 的 稳 健 份 额,B 份 额 是 具 有 杠 杆 效 应 的 激 进 份 额 分 级 基 金 中 的 杠 杆 一 般 有 三 类 : 份 额 杠 杆 =(A

简报158期.doc

Microsoft Word - 9pingb5_let.doc

退休權益.ppt [相容模式]

Microsoft Word - 1.《國文》試題評析.doc

Ps22Pdf

$%%& ()*+, %&, %-&&%%,. $ %,, $,, & /$- 0(1 $%%& %& 234 %-%, 5&%6&633 & 3%%, 3-%, %643 -%%% :::; 7<9; %-%, 3$%$ :::;

# $# #!# # # # # # # %# # # &# # # # #! "

zt

Scott Effective C++ C++ C++ Roger Orr OR/2 ISO C++ Effective Modern C++ C++ C++ Scoot 42 Bart Vandewoestyne C++ C++ Scott Effective Modern C++ Damien

PowerPoint 演示文稿

第 一 节 认 识 自 我 的 意 义 一 个 人 只 有 认 识 自 我, 才 能 够 正 确 地 认 识 到 自 己 的 优 劣 势, 找 出 自 己 的 职 业 亮 点, 为 自 己 的 顺 利 求 职 推 波 助 澜 ; 一 个 人 只 有 认 识 自 我, 才 能 在 求 职 中 保 持

Microsoft PowerPoint - C语言课件-9-结构体.pptx

untitled

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

OOP with Java 通知 : Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢

OOP with Java 通知 : Project 2 提交时间 : 3 月 15 日晚 9 点

C 1

untitled

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;

untitled

JAVA 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:/

运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2

OOP with Java 通知 Project 2 提交时间 : 3 月 21 日晚 9 点 作业提交格式 学习使用 文本编辑器 cmd, PowerShell (Windows), terminal(linux, Mac)

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

关于编写硕士研究生入学考试自命题初试科目

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

Microsoft Word - CPE考生使用手冊 docx

C/C++ System Program Documentation

文件

chap07.key

第六讲 数组、指针与字符串

内 容 提 要 指 针 持 久 动 态 内 存 分 配 字 符 串 ( 字 符 数 组 ) 2

C/C++程序设计 - 字符串与格式化输入/输出

PTR89 应用程序编程接口 V1.00

C++ 程序设计 实验 1 - 参考答案 MASTER 2017 年 5 月 21 日 1

网C试题(08上).doc

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

<4D F736F F D20CBB6CABFD1D0BEBFC9FAC8EBD1A7BFBCCAD4B4F3B8D92D383835B3CCD0F2C9E8BCC62E646F63>

C/C++语言 - C/C++数据

C++ 程序设计 OJ9 - 参考答案 MASTER 2019 年 6 月 7 日 1

C++ 程序设计 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1

untitled

从问题到程序——指针

新版 明解C++入門編

Microsoft PowerPoint - 6. 用户定义类型User-defined Datatypes.ppt [兼容模式]

第5章 递归 (Recurve)

格式化字符串 Weifeng Sun School of Software, DLUT

FY.DOC

Microsoft Word - 第3章.doc

北京大学

Transcription:

指针 Pointers 变量指针与指针变量 Pointer of a variable

变量与内存 (Variables and Memory) 当你声明一个变量时, 计算机将给该变量一个内存, 可以存储变量的值 当你使用变量时, 计算机将做两步操作 : - 根据变量名查找其对应的地址 ; - 通过地址对该地址的变量内容进行读 (retrieve) 或写 (set) 变量的地址称为变量的指针! C++ 通过运算符 & 和 * 对变量进行操作 1. &x : 得到变量的地址 ( 指针 ) &: 取地址 *: 取内容 2. *(&x) : 先得到变量 x 的地址 ( &x), 然后根据地址得到其值 ( *(&x) ).

指针 (Pointers) 指针 (Pointers) 或者说地址 (Memory addresses) 使得操作数据更为方便 - 更灵活的传递引用 ; - 操纵复杂的数据, 即使他们是散乱分布的 ; - 多态性 : 调用数据时不需要知道其类型 指针变量 : 存储地址 ( 指针 ) 的变量 如果一个指针变量 y 存储的是另外变量 x 的地址, 则说变量 y 指向变量 x. 经常形象化地用一个箭头表示这种指向! ptr 存储的是 x 的地址

指针变量的定义格式 : 指针 ( 变量 )- 声明 例如 : int x; int *ptr = &x; 指针变量的使用 : *ptr = 30; //*ptr 就是 ptr 指向的那个变量 std::cout<<ptr; // 输出 ptr 存储的地址 std::cout<<*ptr; // 输出 ptr 指向的变量的值

指针 ( 变量 )- 作为函数参数 将实参指针变量赋值给形参指针变量 如 指针变量 numptr 的值是 x 的地址 (&x) *numptr 就是变量 x

常指针 (const Pointers) const 关键字可以放在一个变量声明的两个位置, 说明指针本身指针本身或指针指向的变量指针指向的变量是不可以修改的常量

Null, Uninitialized, and Deallocated Pointers 任何值为 0 的指针称为空指针 (null pointer). 空指针是一个无效 (invalid) 指针, 访问任何指针指向的变量 ( 称为解引用 (dereferencing)) 时必须检查是否为空指针! 解引用一个不存在或销毁的变量会引起运行期错误! 当 myfunc 函数退出时, 调用这个函数的其他函数不能使用无效的返回指针访问 phantom!

引用 (reference) 引用变量是其他变量的别名 定义引用变量的 & 不是取地址运算符! int y; int &x = y; // 引用变量 x 是 y 的别名 引用变量定义时就必须初始化 对引用变量的修改就是对被引用变量的修改 int y = 3; int &x = y; // 引用变量 x 是 y 的别名 x = 10; std::cout<<y<< \n ;

引用 (reference) 引用变量作为函数形式参数, 对引用形参的修改就是对实际参数的修改! void swap (int &x, int &y){ int t = x; x = y; y = t; } void main (){ int a = 3, b = 5; swap(a,b); cout<<a << <<b<< \n ; }

* 和 & 的多面性 * 在一个变量定义中时, 说明这是定义一个指针变量 int *p = &x; * 在一个定义好的指针变量前, 表示解引用 (dereferencing) 这个指针变量 *p = 34; & 在一个变量定义中时, 表示定义一个引用变量 int &y = x; //y 是 x 的别名 & 在一个定义好的变量前, 表示获取这个变量的地址 int *p = &x;

指针与数组 Pointers and Arrays 数组名实际上是数组第一个元素的地址 myarray[3] 表示返回从第一个元素之后的第 3 个元素 指针算术 : 通过对指针加减整数可以在不同地址之间移动 指针移动的步长 : 由指针类型决定的 ptr 指向数组的第 1 个元素 ptr 指向数组的第 2 个元素 ptr2 指向数组的第 4 个元素 myarray[3] 等价于 *(myarray + 3)

指针与数组 Pointers and Arrays 指针除可以加 / 减整数外, 还可以进行两个指针的减法, 以便获得两个指针的间隔元素的数目! int num = ptr2-ptr; // 两个指针之间间隔长整数的数目

char * 字符串 字符串就是字符数组 我们经常用字符型指针 (char *) 指向这个字符串的第一个字符! char str[] = { h, e, l, l, o, \0 }; char *str2 = str; str2[2] = L ; 但不能修改一个字符指针指向的字符串常量, 如不能修改下面的 coursename2 指向的 6.096

指针的数学运算 Arithmetic of pointers 指针只能进行加 减数学运算, 但是指针的加法和减法的具体运算根据它所指向的数据的类型的大小的不同而有所不同 假设 : 字符 char 占用 1 的字节 (1 byte), 短整型 short 占用 2 个字节, 长整型 long 占用 4 个字节 char *mychar; 1001 1002 1002 1003 1004 1005 1006 1007 1008 1009 mychar

指针的数学运算 Arithmetic of pointers 指针只能进行加 减数学运算, 但是指针的加法和减法的具体运算根据它所指向的数据的类型的大小的不同而有所不同 假设 : 字符 char 占用 1 的字节 (1 byte), 短整型 short 占用 2 个字节, 长整型 long 占用 4 个字节 char *mychar; mychar++; 1001 1002 1002 1003 1004 1005 1006 1007 1008 1009 mychar

指针的数学运算 Arithmetic of pointers 指针只能进行加 减数学运算, 但是指针的加法和减法的具体运算根据它所指向的数据的类型的大小的不同而有所不同 假设 : 字符 char 占用 1 的字节 (1 byte), 短整型 short 占用 2 个字节, 长整型 long 占用 4 个字节 char *mychar; mychar++; mychar = mychar+2; 1001 1002 1002 1003 1004 1005 1006 1007 1008 1009 mychar

指针的数学运算 Arithmetic of pointers 指针只能进行加 减数学运算, 但是指针的加法和减法的具体运算根据它所指向的数据的类型的大小的不同而有所不同 假设 : 字符 char 占用 1 的字节 (1 byte), 短整型 short 占用 2 个字节, 长整型 long 占用 4 个字节 short *myshort; 1001 1002 1002 1003 1004 1005 1006 1007 1008 1009 myshort

指针的数学运算 Arithmetic of pointers 指针只能进行加 减数学运算, 但是指针的加法和减法的具体运算根据它所指向的数据的类型的大小的不同而有所不同 假设 : 字符 char 占用 1 的字节 (1 byte), 短整型 short 占用 2 个字节, 长整型 long 占用 4 个字节 short *myshort; myshort++; 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 myshort

指针的数学运算 Arithmetic of pointers 指针只能进行加 减数学运算, 但是指针的加法和减法的具体运算根据它所指向的数据的类型的大小的不同而有所不同 假设 : 字符 char 占用 1 的字节 (1 byte), 短整型 short 占用 2 个字节, 长整型 long 占用 4 个字节 short *myshort; myshort++; myshort = myshort +2; 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 myshort

指针的数学运算 Arithmetic of pointers 指针只能进行加 减数学运算, 但是指针的加法和减法的具体运算根据它所指向的数据的类型的大小的不同而有所不同 假设 : 字符 char 占用 1 的字节 (1 byte), 短整型 short 占用 2 个字节, 长整型 long 占用 4 个字节 long *mylong; 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 mylong

指针的数学运算 Arithmetic of pointers 指针只能进行加 减数学运算, 但是指针的加法和减法的具体运算根据它所指向的数据的类型的大小的不同而有所不同 假设 : 字符 char 占用 1 的字节 (1 byte), 短整型 short 占用 2 个字节, 长整型 long 占用 4 个字节 long *mylong; mylong++; 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 mylong

指针的数学运算 Arithmetic of pointers 指针只能进行加 减数学运算, 但是指针的加法和减法的具体运算根据它所指向的数据的类型的大小的不同而有所不同 假设 : 字符 char 占用 1 的字节 (1 byte), 短整型 short 占用 2 个字节, 长整型 long 占用 4 个字节 char *p = hello,*q = p; 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 h e l l o \0 pq

指针的数学运算 Arithmetic of pointers 指针只能进行加 减数学运算, 但是指针的加法和减法的具体运算根据它所指向的数据的类型的大小的不同而有所不同 假设 : 字符 char 占用 1 的字节 (1 byte), 短整型 short 占用 2 个字节, 长整型 long 占用 4 个字节 char *p = hello,*q = p; while(*q!= \0 ) q++; intn = q - p; //5 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 h e l l o \0 p q

char a; char * b; char ** c; a = 'z'; b = &a; c = &b; 指针的指针 Pointers to pointers

函数指针 Pointers to functions 声明一个函数指针像声明一个函数原型一样, 除函数指针名前要有 *, 并在括号 () 内 type (*funptr) ( parames ); intaddition (inta, intb) { return (a+b); } int subtraction (int a, int b) { return (a-b); } int(*minus)(int,int) = subtraction; intmain () { intm = (* minus) (7,5) ; minus = add; intn = (* minus) (7,5) ; cout <<m<< <<n<< \n ; return 0; }

函数指针 Pointers to functions 最大的作用是把一个函数作为参数传递给另外一个函数. int addition (int a, int b) { return (a+b); } int subtraction (int a, int b) { return (a-b); } int (*minus)(int,int) = subtraction; int operation (int x, int y, int (*functocall)(int,int)) { int g = (*functocall)(x,y); return (g); } int main () { int m = operation (7, 5, addition); int n = operation (20, m, minus); cout <<m<< <<n<< \n ; return 0; }