指针的大小因操作系统而定,但在同一操作系统下所有指针长度一致
32位操作系统指针长度为4个字节
64位操作系统指针长度为8个字节
1.指针在函数内部使用时
①.指针==地址
②.获取任何变量的地址都是:&变量名
③.*指针变量名,则间接访问到指针所指的变量
例如:
#include<stdio.h>
int main()
{
int a=10;
int *p=&a;
int **pp=&p;
*p=100; //对p进行解一次引用等价于 a=100
printf("a=%d\n",a);
**pp=1; //对pp进行解两次引用等价于 a=1
printf("a=%d\n",a);
return 0;
}

2.指针作为函数形参时
若想通过子函数修改父函数的值,必须:
①传指针
②解引用
例如:
①
#include<stdio.h>
void Swap(int *p1,int *p2)
{
int tmp=*p1; //对p1进行解引用将变量的值赋给tmp 等价于tmp=a
*p1=*p2; //对p2进行解引用将变量的值赋给p1解引用的变量 等价于 a=b;
*p2=tmp; //将tmp的值赋给p2解引用后的变量 等价于 b=tmp
}
int main()
{
int a=10;
int b=20;
int *p1=&a;
int *p2=&b;
printf("未交换%d,%d\n",*p1,*p2);
Swap(p1,p2);
printf("交换后%d,%d\n",*p1,*p2);
return 0;
}
②
#include<stdio.h>
int main()
{
int a=10;
int *p=&a;
p=NULL;
printf("%d\n",*p);
return 0;
}
因为进行p=NULL操作,所以执行程序后会崩溃,若要在子函数中实现将p=NULL操作,需要传p的地址,再解引用
#include<stdio.h>
void PointerNull(int **pp) //pp=&p
{
*pp=NULL; //等价于p=NULL
}
int main()
{
int a=10;
int *p=&a;
PointerNull(&p);
printf("%d\n",*p);
return 0;
}