目录
* &指针与地址
void指针
指针可以等于:
const
指向常量的指针 const int *px
常指针 int * const px
指向常量的常指针const 类型标识符 * const 指针名
指针加减:
指针恒等式
函数×指针【待续】
指针型函数:
指向函数的指针:指向函数存储的首地址
引用与指针
内存分配【待续】
输入出
* &指针与地址
声明指针:int *px ;
给指针赋值:int x;px=&x; (指针的变量名只能等于地址,*表示取后面地址指向的值)
等价:x=3 《=》 *px=3(*+地址 也可以改变 地址所指向的值)
void指针
void 类型的指针
void 类型的指针可以存放任何类型数据的地址,即指向任何类型的对象
不允许直接通过 void 指针来访问其目标对象!
若需访问 void 类型指针的目标对象,必须通过显式类型转换指明目标对象的类型
指针可以等于:
指针可能的取值
(1) 空指针:0, NULL 或值为 0, NULL 的常量
(2) 类型匹配的对象的地址
(3) 同类型的另一有效指针
(4) 类型匹配的对象的前、后地址(相对位置)
int x[3] = {1,2,3};int * px = &x[0];int * py = &x+1;
int * pz;pz = 0; // OK
pz = NULL; // OK
没有初始化或赋值的指针是无效的指针;引用无效指针会带来难以预料的问题!
const
指向常量的指针 const int *px
const 类型标识符 * 指针名
const对象只能使用const指针
const指针可以指向非const对象
但是修改非const对象的值不能通过const指针进行修改
常指针 int * const px
类型标识符 * const 指针名
px一旦赋值,就不能修改
int * const px=a;就不能再px=b了
指向常量的常指针const 类型标识符 * const 指针名
指针不能改,也不能通过指针改变量值
指针加减:
每次运算 :1=1*每个变量所占空间
指针恒等式
int a【n】;int *pa=a;
则2dim:
指针p
函数×指针【待续】
以地址方式传递数据,形参和实参指向共同的内存地址,是同一个数据
形参是指针时,实参可以是指针或地址
可以传递函数代码的首地址,即将函数作为参数
函数间需要传递大量数据(数组)时,通常是利用指针传递数据的首地址
指针型函数:
返回值为【全局变量的】指针or【全局变量的】地址
指向函数的指针:指向函数存储的首地址
int Gcd(int x, int y);
int Lcm(int x, int y);
int (* pf)(int, int); // 声明函数指针
pf=Gcd; // pf 指向函数
Gcdcout << "最大公约数:" << pf(a,b) << endl;
可以象使用函数名一样使用函数指针
引用与指针
► 引用是变量的别名,只针对变量,函数没有引用
► 引用必须初始化,且不能修改
► 用引用能实现的功能,用指针都能实现
► 传递大量数据时(数组),建议使用指针
int a = 3;
int * pa = &a; // 指针
int & ra = a; // 引用(取别名)
内存分配【待续】
new
delete,new完了一定要delete
引用和指针有何区别?
给指针赋值=地址,引用赋值=自身
改变变量:*pa=5《=》&pa=5
初始化是不同的:
引用是一个变量的别名,它必须在定义时初始化,并且一旦初始化之后就不能再指向其他变量。
指针是一个变量,用来存储另一个变量的地址。指针可以在任何时候被重新赋值,以指向不同的变量
-----------------------------以上为第六讲。
输入出
文件输入出等——————————以上为第七讲。