1word=2bytes 1bytes=8bits(即1字=2字节 1字节=8位)
1.
声明: 数据类型* 标识符;//例: int* ptr;//定义了一个指针变量ptr
指针也是一种数据类型,指针变量是用来存放内存单元地址的。
地址编码的基本单位是字节,每个字节有8个二进制位组成。即每个字节是一个基本内存单位,有一个地址。
2."*"和"&"
"*":指针运算符
例:
int* p;//声明一个int型的指针变量
cout<<*p<<endl;//取出指针p所指向的内容
"&":取地址运算符
例:
int &p;//声明一个int型的引用rf
int a,b;
int* pa,* pb=&b;//定义两个指针变量pa,pb.并取b的地址赋予pb
pa=&a;//取a的地址赋予pa
(1)可以声明指向常量的指针,此时不能通过指针来改变所指对象的值,但指针本身可以改变,可以指向另外的对象
int a;
const int* p1=&a;//p1是指向常量的指针
int b;
p1=&b;//正确,p1本身的值可以改变
*p1=1;//编译时出错,不能通过p1改变来所指的对象
(2)可以声明指针类型的常量,这时指针本身的值不能改变
int* const p2=&a;
p2=&b;//错误,p2是指针常量,值不能改变
不同类型的指针之间或指针与非0整数之间的关系运算是毫无意义的。但是指针变量可以和整数0进行比较,0专门用来表示空指针,也就是一个不指向任何有效地址的指针。
小习惯:如果不便于用一个有效地址给一个指针变量赋初值,那么应当用0作为它的初值,从而避免指向不确定地址的指针出现。
例:
int *p;
p=0;
或
int *p=NULL;
5.
数组名就是数组的首地址,也就是第一个元素的地址。
例:
int array[5];
int* pri=array;//等价于 int* pri=&array[0];
取数组下标为i的元素: *(数组名+i);