指针专题讲解PPT课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
存放一个地址需要几个字节?
答案是和一个 int 类型的大小相同:4字节
int* char* bool* float* double*
pInt; pChar; pBool; pFloat; pDouble;
3
授课:XXX
2021/3/9
定义一个指针变量
数据类型*
int* p;
数据类型
int *p;
基本概念
指针专题讲解1
1
授课:XXX
2021/3/9
wk.baidu.com
指针是什么?
指针实际上指的是“指针变量” 指针是一种用于储存“另外一个变量的地址”的变
量
指针也需要类型,它所存储的那个变量类型,就称 为指针的类型
2
授课:XXX
2021/3/9
指针的大小
一个指针变量占用多少内存空间?
既然指针只是要存储另一个变量的地址,。注意,是 存放一变量的地址,而不是存放一个变量本身,所以, 不管指针指向什么类型的变量,它的大小总是固定的: 只要能放得下一个地址就行
“地址解析”就是 地址->值 的解释过程
“地址解析(*)” 和 “取址(&)” 正好是一对 相反的操作
int k = 100; int* p = &k; int m = *p;
int k = 100; int* p = &k;
9
授课:XXX
2021/3/9
指针的加减操作
整型变量可以加减,求和,求差:
12
授课:XXX
2021/3/9
偏移指针
对指针 进行加1操作,得到的是下一个元素的地址, 而不是原有地址值直接加1,减以后,得到的是上 一个元素的大小
一个类型为 T 的指针的移动,以 sizeof(T) 为移动单 位
比如:
int* pInt; 移动单位为 sizeof(int) 。即:4。而 char* pChar; 移动单位为 sizeof(char)。即1。
parr1 += 1; 的结果,相当于: parr1 = parr1 + 2;
14
授课:XXX
2021/3/9
* (地址解析符)与 ++ 的优先级
当 * (作为地址解析符) 和 ++ 同时作用在指针时, 不管是前置还是++,都要比*有更高的优先级
后置 ++ 或 后置-- 操作,需要系统生成一个临时变 量。
int arr[3] = {100,99,80}; int* p = arr;
让指针指向一个新地址。在C++中,常用一个关键字: new 来为指针开辟一段新空间
int* p = new int;
8
授课:XXX
2021/3/9
地址解析 及其操作符 *
* 在C,C++语言里除了起“乘号”的作用以外,还能 起“地址解析”的作用
正。谢谢大家!
17
给指针赋值的操作:
用 & 取得普通变量的地址
int k; int* p = &k;
指针之间的赋值
int k; int* p1 = &k; int* p2 = p1;
7
授课:XXX
2021/3/9
给指针变量赋值
让指针指向数组
char name[] = "NanYu"; char* p = name; //不用取址符 &
如果这个变量占用的内存空间很小(比如指针类型 总是只有4字节),则该操作带来的,对程序速度的 负面影响可以不计,如果变量很大,并且多次操作。 则应在可能的情况下,尽量使用前置++或前置--操 作
15
授课:XXX
2021/3/9
小结
指针是什么?不过也是一个变量,只是存储的是另 一个变量的内容地址。
int a = 100; int b = 99; int c = a - b;
指向数组的指针
int arr[] = {1,2,3,4,5}; //一个数组 int* parr; //一个指针。 parr = arr; //没有 ‘&’ ?对啊,对数组就是不用取址符。 cout << *parr << endl; //输出 *parr
变量名; *变量名;
4
授课:XXX
2021/3/9
指向不明的指针
定义一个整型指针:int* p;
一个指向不明的指针,是一个危险的家伙
5
授课:XXX
2021/3/9
给指针变量赋值
int k = 100; int* p; //p取得变量k的地址 p = &k;
6
授课:XXX
2021/3/9
给指针变量赋值
指针有多大?总是4字节。 如何定义指针? 多了一个*。 如何为指针赋值?全靠一个个&,除非对方已经是
地址(如对方也是指针或是一个数组)。
如何得到指针所指的变量?如何通过指针改变所指 变量?地址解析符:*。
如何移动指针?加加减减。
16
授课:XXX
2021/3/9
刚才的发言,如 有不当之处请多指
10
授课:XXX
2021/3/9
指针的加减操作
11
授课:XXX
2021/3/9
指针的加减操作
偏移指针
int arr[] = {1,2,3,4,5}; //一个数组 int* parr; //一个指针。 int* parr2; parr2 = parr + 1;
请问:假设parr 中存的值为 “10000010”, parr2 的值是多少?
13
授课:XXX
2021/3/9
指针的 += 、 -= 、++、 -- 操作
C、C++ 除了“传统”的 +,- 操作以外,还提供了如 题的四种加减操作。这些对于指针同样适用
int arr[] = {1,2,3,4,5,6,7,8,9,10}; int* parr1 = arr;
parr1 += 1; //向后称动一个单位
答案是和一个 int 类型的大小相同:4字节
int* char* bool* float* double*
pInt; pChar; pBool; pFloat; pDouble;
3
授课:XXX
2021/3/9
定义一个指针变量
数据类型*
int* p;
数据类型
int *p;
基本概念
指针专题讲解1
1
授课:XXX
2021/3/9
wk.baidu.com
指针是什么?
指针实际上指的是“指针变量” 指针是一种用于储存“另外一个变量的地址”的变
量
指针也需要类型,它所存储的那个变量类型,就称 为指针的类型
2
授课:XXX
2021/3/9
指针的大小
一个指针变量占用多少内存空间?
既然指针只是要存储另一个变量的地址,。注意,是 存放一变量的地址,而不是存放一个变量本身,所以, 不管指针指向什么类型的变量,它的大小总是固定的: 只要能放得下一个地址就行
“地址解析”就是 地址->值 的解释过程
“地址解析(*)” 和 “取址(&)” 正好是一对 相反的操作
int k = 100; int* p = &k; int m = *p;
int k = 100; int* p = &k;
9
授课:XXX
2021/3/9
指针的加减操作
整型变量可以加减,求和,求差:
12
授课:XXX
2021/3/9
偏移指针
对指针 进行加1操作,得到的是下一个元素的地址, 而不是原有地址值直接加1,减以后,得到的是上 一个元素的大小
一个类型为 T 的指针的移动,以 sizeof(T) 为移动单 位
比如:
int* pInt; 移动单位为 sizeof(int) 。即:4。而 char* pChar; 移动单位为 sizeof(char)。即1。
parr1 += 1; 的结果,相当于: parr1 = parr1 + 2;
14
授课:XXX
2021/3/9
* (地址解析符)与 ++ 的优先级
当 * (作为地址解析符) 和 ++ 同时作用在指针时, 不管是前置还是++,都要比*有更高的优先级
后置 ++ 或 后置-- 操作,需要系统生成一个临时变 量。
int arr[3] = {100,99,80}; int* p = arr;
让指针指向一个新地址。在C++中,常用一个关键字: new 来为指针开辟一段新空间
int* p = new int;
8
授课:XXX
2021/3/9
地址解析 及其操作符 *
* 在C,C++语言里除了起“乘号”的作用以外,还能 起“地址解析”的作用
正。谢谢大家!
17
给指针赋值的操作:
用 & 取得普通变量的地址
int k; int* p = &k;
指针之间的赋值
int k; int* p1 = &k; int* p2 = p1;
7
授课:XXX
2021/3/9
给指针变量赋值
让指针指向数组
char name[] = "NanYu"; char* p = name; //不用取址符 &
如果这个变量占用的内存空间很小(比如指针类型 总是只有4字节),则该操作带来的,对程序速度的 负面影响可以不计,如果变量很大,并且多次操作。 则应在可能的情况下,尽量使用前置++或前置--操 作
15
授课:XXX
2021/3/9
小结
指针是什么?不过也是一个变量,只是存储的是另 一个变量的内容地址。
int a = 100; int b = 99; int c = a - b;
指向数组的指针
int arr[] = {1,2,3,4,5}; //一个数组 int* parr; //一个指针。 parr = arr; //没有 ‘&’ ?对啊,对数组就是不用取址符。 cout << *parr << endl; //输出 *parr
变量名; *变量名;
4
授课:XXX
2021/3/9
指向不明的指针
定义一个整型指针:int* p;
一个指向不明的指针,是一个危险的家伙
5
授课:XXX
2021/3/9
给指针变量赋值
int k = 100; int* p; //p取得变量k的地址 p = &k;
6
授课:XXX
2021/3/9
给指针变量赋值
指针有多大?总是4字节。 如何定义指针? 多了一个*。 如何为指针赋值?全靠一个个&,除非对方已经是
地址(如对方也是指针或是一个数组)。
如何得到指针所指的变量?如何通过指针改变所指 变量?地址解析符:*。
如何移动指针?加加减减。
16
授课:XXX
2021/3/9
刚才的发言,如 有不当之处请多指
10
授课:XXX
2021/3/9
指针的加减操作
11
授课:XXX
2021/3/9
指针的加减操作
偏移指针
int arr[] = {1,2,3,4,5}; //一个数组 int* parr; //一个指针。 int* parr2; parr2 = parr + 1;
请问:假设parr 中存的值为 “10000010”, parr2 的值是多少?
13
授课:XXX
2021/3/9
指针的 += 、 -= 、++、 -- 操作
C、C++ 除了“传统”的 +,- 操作以外,还提供了如 题的四种加减操作。这些对于指针同样适用
int arr[] = {1,2,3,4,5,6,7,8,9,10}; int* parr1 = arr;
parr1 += 1; //向后称动一个单位