指针==地址:指针是一个地址,而指针变量是存放地址的变量。
int main()
{
int a = 10;
int b = 20;
int *p;//定义一个整型指针变量
int *p = &a;//int *p;p=&a;
*p = 100;//a=100
p = &b;
*p = 200;//b=200
int *pp = &p;
*pp = &a;//p=&a
**pp = 1000;//a=1000 (*p==a)=1000
*pp = &b;//p=&a
**pp = 2000;//b=2000
}
&a:获取a的地址
int a=10;整型变量存放整型值
char b=‘x’;字符变量存放字符值
double c=12.3;浮点变量存放浮点值
int *p=&a;整型指针(地址)变量存放整型指针值
*p=30;//间接访问符,解引用
*的用法:
- 乘法:3*4
- 定义一个整形指针变量:int *p
- 对p解引用,到达p指向的变量:*p
指针大小:x86或32位平台,4字节;
x64或64位平台,8字节。
void Swap(int *p1, int *p2)//**error**,没有解引用,只改变指针指向
{
int tmp = *p1;
p1 = p2;
p2 = tmp;
}
void Swap(int *p1, int *p2)//**error,**
{
int *tmp;//野指针,悬挂指针 没有访问权限的指针(地址)
*tmp = *p1;
*p1 = *p2;
*p2 = *tmp;
}
void Swap(int *p1, int *p2)
{
int tmp;
tmp = *p;
*p1 = *p2;
*p2 = tmp;
}
子函数改变可影响到父函数,一定要传指针和解引用,两条件缺一不可
void Fun(int *p1, int *p2)//子函数
{
*p1 = 10;
*p2 = 20;
}
int main()//父函数
{
Fun(&a, &b);
printf("%d %d\n", a, b);
return 0;
}
NULL:唯一一个标识当前指针是一个无效指针,通过该函数,将父函数中的p设为NULL
void Fun(int *p)
{
p = NULL;
}
int main()
{
int a = 10;
int *p = &a;
//p=NULL;
Fun(p);
printf("%d\n", *p);
return 0;
}