一、指针的概念
指针是内存中的地址。
1、语法:类型 * 变量名
这里的类型是定义了这个指针指向的变量类型。
2、指针的运算符(*和&)
&取地址符
例如:
int counta=100;
int * mm;
mm=&counta;
假设counta所在地址是2000,这是候m=2000。
#include
void main()
{
int counta=100;
int * mm;
mm=&counta;
cout
}
*返回这个地址的值,与&正好相反。
#include
void main()
{
int p,counta=100;
int * mm;
mm=&counta;
p=* mm;
cout
}
3、指针的赋值
#include
void main()
{
int x;
int * p1,* p2;
p1=&x;
p2=p1;
cout
}
结果: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
}
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
cout
}
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
cout
cout
cout
cout
cout
cout
cout
cout
cout
cout
cout
//规律:* (p1+((1*3)+2))
}
思考:指针是地址,那么如果想得到某地址的变量用什么方法。
二、将引用和指针相比较
引用是变量的别名。
#include
void main()
{
int * p1,a=100;
int & y1=a; //必须直接赋值
p1=&a;
y1=a;
cout
cout
}
指针和引用可以达到同样的效果。
#include
void main()
{
void funca(int & vala);
void funcp(int * valp);
int a=100,b=100;
int & y1=a; //必须直接赋值,而且只能赋值一次
funca(a);
funcp(&b);
cout cout }void funca(int & vala){ vala=200;}void funcp(int * valp){ * valp=500;}三、*和&的用途,避免这些符号在使用上发生混淆1、*的作用: 1乘号 2指针定义符号 3返回某个地址的值2、&的作用: 1位运算中的“与” 2取地址符 3引用