一、指標的概念
指標是記憶體中的地址。
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>引用