在c语言中指针*q=&a和q=&a和*q=*a各自是什么意思

2024-11-06 13:41:34
推荐回答(4个)
回答(1):

先说一下这几个运算符的意思:*在定义变量的时候作用是声明这是一个指针变量,再其它地方是用来寻址的;&是取地址运算符,可以获取一个变量在内存中的地址;
然后说你提到的这三句话:
*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了。

回答(2):

“&”是取地址操作符,“*”是间接引用操作符,他们是对应的。“*q=&a”,说明q至少是二维指针,q所指向的一维指针用来存放a的地址;“q=&a”,说明q是指针,他存放了a地址;“*q=*a”,说明q和a都是指针,这操作是把a所指向的变量的值赋给q所指向的变量(就是说如果a指向变量b,q指向变量c,那么那句话的意思就是c=b)。

回答(3):

*q=&a 出现在指针定义中,即q是指向a的指针;
q=&a 指针q指向a的地址;
*q=*a,两指针相等,指向同一个元素,由于a为数组,数组名表示首元素的地址,即*q=*a=a[0](一维数组)=a[0][0](二维数组)

回答(4):

代码不全, 无法判断, 这要看你的q和a是怎么定义的