A:先讲指针变量
指针变量前面的“*”表示该变量为指针型变量。
一般形式为:类型说明符 *变量名。
如int *p;
里面int代表这个指针指向的变量是整型。p是变量名,而不是*p。
B:
关于取值符号“*”和取地址符“&”
*p 相当于变量名p为一个地址,而*p就是从p这个地址里取出数,所以叫取值符;
&a 相当于数值或变量a的地址,而&a就是从a这个变量里取出存放这个值的地址,所以叫取地址符号。
在这放一小段程序
int a=1; int *p; //定义p为指针变量名 p=&a; //将a的地址取出来赋值给p printf("%d",*p); //将p这个地址中存放的数字打印出来
输出结果为1
C:
在上面那些程序中,我将指针的定义和赋值分开,避免了大部分初学者会犯的错。
如果我将指针变量的赋值和定义放在一起
int a=1; int *p=a; //按照我们正常的思维,将a赋值给*p,然后后面打印出来的是 1 printf("%d",*p);
实际上打印出来的结果是乱码
为什么
其实在指针变量这个定义这里
int *p=a;
实际上是拆开成
int *p; p=a; //就是相当于将a这个数值赋值成*p这个数的地址
后面我们打印*p时,计算机就去取地址为1的数值,我们并没有定义过这个数组,自然出现乱码