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的数值,我们并没有定义过这个数组,自然出现乱码

 

posted on 2021-03-26 01:03  7i7i  阅读(53)  评论(0编辑  收藏  举报