先说一下这几个
运算符的意思:*在定义变量的时候作用是声明这是一个指针变量,再其它地方是用来寻址的;&是取地址运算符,可以获取一个变量在内存中的地址;
然后说你提到的这三句话:
*q=&a
这句话应该是出现在定义变量q的时候,可以这样写:
int a;
int *q = &a;
这里,*的作用是声明q是一个指针变量,&的作用就是把a的地址取出来,通过赋值号“=”,赋给指针q;
q=&a
这句话是出现在定义变量之后的,可以这么写:
int a;
int *q;
q = &a;
这里q已经在定义时被声明过是一个指针变量了,在使用的时候不需要附带*,这句话的意思也是把a的地址赋给指针q;
上边这两句的效果其实是一样的。
*q=*a
这样的话,q和a这两个变量就都是指针变量了,这里的*不代表“声明”,而是“指向”,意思是把a指向的那个变量的值赋值给q指向的那个变量;这么说吧,如果有这样的定义:
int x = 2,y = 3;
int *a,*q;
a = &x;
q = &y;
到这里为止,定义了两个整型变量xy和两个指针aq,a指向x,q指向y;
*q = *a;
执行完这句之后,q指向的值,也就是y的值,已经等于了a指向的值,即y这个时候也等于2了。