int *p1,p2;
p1是int型的指针,p2是一个int型变量。
*是声明符。
int a;
int* p;
p = &a;
上面的代码也可以写成
int a;
int* p = &a;
需要注意的是, int* 是指针变量的类型,而后面的 p 才是变量名,用来存储地址,因此地址 &a 是赋值给 p 而不是 *p 的。
所以,int *p中的 p 必须赋予一个地址,如果不是地址,编译器则会报错(实在不能理解的话就把地址当做一个新的类型,类型不同肯定会报错嘛 ╮( ̄▽ ̄)╭)
const int *m1 = new int(10);
int* const m2 = new int(20);
const只对它左边的东西起作用,唯一的例外就是const本身就是最左边的修饰符,那么它才会对右边的东西起作用。根据这个规则来判断,m1应该是常量指针(即,不能通过m1来修改它所指向的内容。);而m2应该是指针常量(即,不能让m2指向其他的内存模块)。
当然,如果 a 代表的是数组首地址,那就另说了。
a为数组首地址时
#include<stdio.h>
int main(){
int a[3]={1,2,3};
int*p=a;
printf("%d\n",*p);
//输出 a[0]
return 0;
}