一、指针的概念

指针是内存中的地址。

1、语法:类型 * 变量名
这里的类型是定义了这个指针指向的变量类型。

2、指针的运算符(*和&)
<1>&取地址符
例如:
int counta=100;
int * mm;
mm=&counta;
假设counta所在地址是2000,这是候m=2000。
#include
void main()
{
int counta=100;
int * mm;
mm=&counta;
cout < <<"\N";
}
<2>*返回这个地址的值,与&正好相反。
#include
void main()
{
int p,counta=100;
int * mm;
mm=&counta;
p=* mm;
cout <

<<"\N";
}
3、指针的赋值

#include
void main()
{
int x;
int * p1,* p2;
p1=&x;
p2=p1;
cout < <<"\N";
}

结果:0x0012FF7C
4、指针的运算
指针的++与--是将指针的地址移动所属变量类型位数。

char 8
int 16
long 32
float 32
double 64
5、指针与数组

数组声明:类型 变量名[长度]

没有下标的“一维”数组名就是一个指向该数组第一个元素的指针。

#include
void main()
{
int x[3]={1,2,3};
int * p1;
p1=x;
cout < <<"\N";
}
a、等价关系:

如:char c[10];
c 和 &c[0] 是等价的。

再如:char c[2][3];
c 和 &c[0][0] 是等价的。
*(c+12) 和 &c[1][2] 是等价的。

b、数组与指针的关系

1>一维数组的指针

#include
void main()
{
int x[2]={1,2};
int * p1;
p1=x;
cout <<* p1<<"\n";
cout <<* (p1+1)<<"\n";
}

2>二维数组的指针

#include
void main()
{
int
x[2][3]={1,2,3,4,5,6};
//int x[2]={1,2};
int * p1;
p1=&x[0][0]; //二维数组给指针不能用"p1=x"这个来赋值,只能是“p1=x[2]”
cout < <<"\N";
cout < <<"\N";
cout < <<"\N";
cout < <<"\N";
cout < <<"\N";
cout < <<"\N";
cout <<* p1<<"\n";
cout <<* (p1+1)<<"\n";
cout <<* (p1+2)<<"\n";
cout <<* (p1+3)<<"\n";
cout <<* (p1+4)<<"\n";
cout <<* (p1+5)<<"\n";
//规律:* (p1+((1*3)+2))
}

思考:指针是地址,那么如果想得到某地址的变量用什么方法。

二、将引用和指针相比较

引用是变量的别名。

#include
void main()
{
int * p1,a=100;
int & y1=a; //必须直接赋值
p1=&a;
y1=a;
cout <<* p1<<"\n";
cout < <<"\N";
}

指针和引用可以达到同样的效果。

#include
void main()
{
void funca(int & vala);
void funcp(int * valp);
int a=100,b=100;
int & y1=a; //必须直接赋值,而且只能赋值一次
funca(a);
funcp(&b);
cout < <<"\N";
cout <<<"\N";
}
void funca(int & vala)
{
vala=200;
}
void funcp(int * valp)
{
* valp=500;
}

三、*和&的用途,避免这些符号在使用上发生混淆

1、*的作用:

1>乘号
2>指针定义符号
3>返回某个地址的值

2、&的作用:

1>位运算中的“与”
2>取地址符
3>引用