指针变量的初始化——必须先赋值后使用
- 在指针变量定义或者初始化时,变量前的* 只能表示是个指针变量。
- 把一个变量的地址作为初始化值时,该变量必须在此前进行定义。
- 可以用初始化的指针变量给另一个指针变量作初始化值。
- 不能用数值作为指针变量的值,但可以将一个指针变量初始化为一个空指针。
- 指针变量定义是的存储单元和它所指向的目标变量的数据类型必须一致。
例如:
int *p=1000; 是不对的 而 int *p=0;是对的。
#include<stdio.h>
void swap1(int x,int y),swap2(int *px,int *py),swap3(int *px,int *py);
int main()
{
int a=1,b=2;
int *pa=&a,*pb=&b;
//px存放a的地址,pb存放b的地址
swap1(a,b);
printf("After calling swap1: a=%d b=%d\n",a,b);
a=1;
b=2;
swap2(pa,pb);
printf("After calling swap2: a=%d b=%d\n",a,b);
a=1;
b=2;
swap3(pa,pb);
printf("After calling swap3: a=%d b=%d\n",a,b);
return 0;
}
void swap1(int x,int y)
{
int t;
t=x;//变得是x和y的值,当调回主函数时,swap1中定义的变量销毁了
所以不改变a和b的值。
x=y;
y=t;
}
void swap2(int *px,int *py)
{
int t;
t=*px; //通过*符号,改变了px和py指向的值,a,b的存储单元也变了,
所以a,b的值也变了。
*px=*py;
*py=t;
}
void swap3(int *px,int *py)
{
int *pt;
pt=px;//改变的时px,py形参指针的值,没有*,px,py不会指向a,b。
所以a,b的之没变。
px=py;
py=pt;
}
结果:
After calling swap1: a=1 b=2
After calling swap2: a=2 b=1
After calling swap3: a=1 b=2