p指向a:p的值是a的地址
*的作用:
- 定义 (int* p----定义一个int类型的指针变量)
- 取地址对应的数据 (*p---获取*下的值(p的值)对应的值,即*(0x1000)=5)
*&p和&*p的区别:
*&p:
- &p:获取p的地址,即0x1008
- *&p:即*(0x1008),获取地址0x1008对应的值,即*&p=0x1000
&*p:
- *p: p的值(0x1000)对应的值,即*p=5
- &*p:取p的值对应的值的地址,即5的地址,即0x1000
这里的 * 称为指针运算符,用来取得某个地址上的数据,请看下面例子:
例1:
#include<stdio.h>
int main() {
int a = 15;
int *p = &a; //定义指针变量
printf("%d, %d\n", a, *p);
return 0;
}
//运行结果:15,15
例2:
#include<stdio.h>
int main() {
int a = 15, b = 99, c = 222;
int *p = &a; //定义指针变量
*p = b; //通过指针变量修改内存上的数据
c = *p; //通过指针变量获取内存上的数据
printf("%d, %d, %d, %d\n", a, b, c, *p);
return 0;
}
//运行结果:99,99,99,99
通过指针交换两个变量的值:
#include<stdio.h>
int main() {
int a = 100, b = 999, temp;
int *pa = &a, *pb = &b;
printf("%d, %d\n", a, b);
/***开始交换***/
temp =*pa //将a的值先保存起来
*pa =*pb //将b的值交给a
*pb = *temp //再将保存起来的a的值交给b
printf("%d, %d\n", a, b);
return 0;
}
//运行结果:
a = 100, b = 999
a = 999, b = 100