int(int *px, int *py) { *px = 5; *py = 10; return0; } intmain(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(); return0; }
用法说明及个人理解
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; }
近期评论