c++学习笔记:pointer(指针)

基本代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23


int (int *px, int *py)
{
*px = 5;
*py = 10;
return 0;
}
int main(void)
{
int a = 0;
int b = 0;
int *pa, *pb;
pa = &a; //pa指向变量a的“地址”
pb = &b; //pb指向变量b的“地址”
sub(pa, pb);
printf("a:%dn", a);
printf("b:%d", b);

rewind(stdin);
getchar();
return 0;
}

用法说明及个人理解

  • Pointer可应用于变量间数据的交换
  • Pointer指向变量的地址,而不是数据
    • pa与pb分别指向变量a,b的地址
    • “*” 作为符号时,代表变量为指针类型;作为运算符时,代表某变量地址的数据

使用指针的数列操作

用法说明

  • 指针指向的内容在进行数列操作时可以使用形如px + 1的地址转换
    • 例如:*px = 20; *(px + 1) = 30; *(px + 2) = 10;
  • 指向一个数列(eg. data[x])时使用形如:px = &data[0];的声明
    • 数列操作时*(px + n)等同于px[n]
    • 此情况时,可简化为px = data;,含义完全相同,都指向 data[0]
      • 注:不能使用px = &data;的形式。因为这相当于px = &&data[0];
  • Pointer数列在声明时可忽略文字列长度

数列操作的几种方法对比

  • 使用 [] 运算符的写法:
1
2
3
4
5
6
7
8
/************************************************
使用命名数列的写法
************************************************/
int i, data[3];
for (i = 0; i < 3; i++)
{
data[i] = 0;
}
1
2
3
4
5
6
7
8
/************************************************
使用指针的写法
************************************************/
int *p, i, data[3];
for (p = &data[0], i = 0; i < 3; i++)
{
p[i] = 0;
}
  • 使用 * 运算符的写法:
1
2
3
4
5
6
7
8
/************************************************
使用命名数列的写法
************************************************/
int i, data[3];
for (i = 0; i < 3; i++)
{
*(data + i) = 0;
}
1
2
3
4
5
6
7
8
/************************************************
使用指针的写法
************************************************/
int *p, data[3];
for (p = &data[0]; p < data + 3; p++)
{
*p = 0;
}

メモ(日本語)

ポインタ変数の定義

1
2
short *a;
short *b;

ポインタが定義された初期状態ではアドレスが入っていない

1
a = &b; //bのアドレスを代入

アドレスを代入するときは必ず型宣言の同じものを代入する