当前位置:文档之家› 指针专题讲解

指针专题讲解


指向不明的指针
定义一个整型指针:int* p; 一个指向不明的指针,是一个危险的家伙
给指针变量赋值
int k = 100; int* p; //p取得变量k的地址 p = &k;
给指针变量赋值
给指针赋值的操作:
用 & 取得普通变量的地址
int k; int* p = &k;
指针之间的赋值
而不是原有地址值直接加1,减以后,得到的是上 一个元素的大小 一个类型为T 的指针的移动,以 sizeof(T) 为移动 单位 比如: int* pInt; 移动单位为 sizeof(int) 。即:4。而 char* pChar; 移动单位为 sizeof(char)。即1。
指针的 += 、 -= 、++、 -- 操作
指针的加减操作
指针的加减操作
偏移指针
int arr[] = {1,2,3,4,5}; //一个数组 int* parr; //一个指针。 int* parr2; parr2 = parr + 1;
请问:假设parr 中存的值为 “10000010”, parr2
的值是多少?
偏移指针
对指针 进行加1操作,得到的是下一个元素的地址,
* (地址解析符)与 ++ 的优先级
当 * (作为地址解析符) 和 ++ 同时作用在指针时,
不管是前置还是++,都要比*有更高的优先级 后置 ++ 或 后置-- 操作,需要系统生成一个临时变 量。 如果这个变量占用的内存空间很小(比如指针类型 总是只有4字节),则该操作带来的,对程序速度的 负面影响可以不计,如果变量很大,并且多次操作。 则应在可能的情况下,尽量使用前置++或前置--操 作
存放一个地址需要几个字节?
答案是和一个 int 类型的大小相同:4字节
int* char* bool* float* Байду номын сангаасouble* pInt; pChar; pBool; pFloat; pDouble;
定义一个指针变量
数据类型*
int*
int
变量名; *变量名;
p;
*p;
数据类型
指针的加减操作
整型变量可以加减,求和,求差:
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
new 来为指针开辟一段新空间
int* p = new int;
地址解析 及其操作符 *
* 在C,C++语言里除了起“乘号”的作用以外,还
能起“地址解析”的作用
“地址解析”就是 地址->值 的解释过程 “地址解析(*)” 和 “取址(&)” 正好是一对
相反的操作
int k = 100; int* p = &k; int m = *p; int k = 100; int* p = &k;
C、C++ 除了“传统”的 +,- 操作以外,还提供了
如题的四种加减操作。这些对于指针同样适用
int arr[] = {1,2,3,4,5,6,7,8,9,10}; int* parr1 = arr;
parr1 += 1; //向后称动一个单位
parr1 += 1; 的结果,相当于: parr1 = parr1 + 2;
int k; int* p1 = &k; int* p2 = p1;
给指针变量赋值
让指针指向数组
char name[] = "NanYu"; char* p = name; //不用取址符 & int arr[3] = {100,99,80}; int* p = arr;
让指针指向一个新地址。在C++中,常用一个关键字:
小结
指针是什么?不过也是一个变量,只是存储的是另
一个变量的内容地址。 指针有多大?总是4字节。 如何定义指针? 多了一个*。 如何为指针赋值?全靠一个个&,除非对方已经是 地址(如对方也是指针或是一个数组)。
如何得到指针所指的变量?如何通过指针改变所指
变量?地址解析符:*。 如何移动指针?加加减减。
基本概念
指针专题讲解1
指针是什么?
指针实际上指的是“指针变量”
指针是一种用于储存“另外一个变量的地址”的变

指针也需要类型,它所存储的那个变量类型,就称
为指针的类型
指针的大小
一个指针变量占用多少内存空间?
既然指针只是要存储另一个变量的地址,。注意,是
存放一变量的地址,而不是存放一个变量本身,所以, 不管指针指向什么类型的变量,它的大小总是固定的: 只要能放得下一个地址就行
相关主题