我们先简单理解*与&:
*是取值运算符,对地址使用可以获得地址中储存的数值;对于指针a,*a表示取a中的值
&是地址运算符,对变量使用可以获得该变量的地址。 对于变量b,*b表示取b的地址
int *p=a和int *p=&a有什么区别?
代码如下:
#include<stdio.h>
int main()
{
int a[3]={3};
int *p=a;
printf("%d\n",*p);//与前面定义的数组名a类型相同,才可以这样赋值
/*
这样方法只有在定义数组时才能这样用因为数组名就是地址。
*/
int b=3;
int *f=&b;
/*
int *f=&b;
注意:这个变量声明语句中的星号*这是一个指针类型说明符,不是间接寻址运算符。所以,该语句不能理解为将&b的值赋值给f所指向的变量。事实上可以等价于下面的语句:
int *f; //指针变量的声明
f=&b; //指针变量的定义
*/
printf("%d\n",*f); \\这是常规的指针表达,前面定义的a是普通变量,才可以这样赋值。
}
运行结果为3,3。