在定义时,*p=&a[0]也是成立的,但是在定义之后比如
int a[5] ,*p;
*p=a或者*p=&a[0]就会提示出错
能解释一下吗
对啊,a[0]这是元素,所以要加&运算符,a本身就是数组的首地址,不能加&
int a[5] ,*p; //这是声明语句,这里的*是指针类型标识符,表示p是指针变量
*p=5;//这是操作语句,将5赋值p指针的单元,这里的*是间接访问运算符,所处的位置不同,
//则完成的功能不同
所以:
*p=a; //这个语句中,a为地址,*p为取值运算,类型不匹配
貌似理解了,两个*不一样。在追问一下下,取值运算符是间接访问运算符,是这个意思吧。
追答取值运算符与间接访问运算符,同一个意思,表述不同,
因为*p是通过p的值取得其所指单元的值,所以*也称为间接访问运算符,是以其取值方式来表述的
*p=a 表示把数组的地址交给p
p=a表示吧数组的首地址交给p………………表示不是很理解 a不就是代表首地址吗?为什么还代表地址。再有*p应该表示指针p所指向的内容,而a是地址,为什么把一个地址赋给内容成立呢?而且输出的是数组的内容而不是数组的地址。
同时,
在定义时,*p=&a[0]也是成立的,但是在定义之后比如
int a[5] ,*p;
*p=a或者*p=&a[0]就会提示出错
能解释一下吗