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

作者&投稿:友耿 (若有异议请与网页底部的电邮联系)
c语言中 char *q=a;什么意思~

在c语言中,char* q=a;定义一个指向字符类型的指针q,并将它初始化为a。
这里a一般应该是一个地址,通过*q我们就可以访问a处内存的值。
示例程序如下:
#includeint main(int argc, char* argv[]){ char c='A'; printf("字符c的初始值是:%c;
",c); char* a=NULL; a=&c;// 取c的地址复制给a char* q=a;//定义一个执行字符类型的指针并初始化为a printf("
通过指针q访问字符c,得到c的值是%c;
",*q); *q='Z'; printf("
通过指针q修改字符c后c的值变为:%c。
",c); getchar(); return 0;}
编译后的运行结果如下图所示:

1 是错误的,不能将 int 赋值给 int *
2 是正确的,因为 &a 的类型为 int *,正是 q 的类型;
3 理论上正确,实际中不妥,因为 q 指向受保护内存区,此时对 q 解引用并赋值,程序会崩掉;
4 是错误的,道理和 3 同理;

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

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

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

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

[答疑] c语言指针 *q=p 一道选择题
答:C)sizeof(*q)——计算出了一个char变量p[0]所占字节数,所以不正确。D)sizeof(p[0])——计算出了一个char变量p[0]所占字节数,所以不正确。p++操作是错误的,编译不过。因为p是数组名,是不能改变的所谓“常指针”,不能进行++、--操作。而q是普通指针,所以q++可以指向下一个元素,但...

c语言中 char *q=a;什么意思
答:在c语言中,char* q=a;定义一个指向字符类型的指针q,并将它初始化为a。这里a一般应该是一个地址,通过*q我们就可以访问a处内存的值。示例程序如下:include<stdio.h>int main(int argc, char* argv[]){ char c='A'; printf("字符c的初始值是:%c;\n",c); char* a=NULL; ...

帮忙一道C语言题!
答:明显选A ,对指针变量的赋值只能是地址而不能是具体的值,其中语句 *q=*(p+5)表示的意思是讲p指针变量的地址值加5后所指向的空间的值赋给q空间,而q是指针变量,只能存放地址值,故这个语句是错误的,应该改成 q=p+5; 但答案为6,11。它相当为p=a+10。相当于是在p所指向a[5]的情况...

c语言中指针的定义问题。为什么*q加括号?
答:加不加括号,是数组指针,还是指针数组的区别 p[2] 是一个指针数组,首先它是一个数组,数组中存的是指针,存指针的数组。(*q)[2] 是数组指针,加括号先与 *结合,它是一个指针,指向一个第一维包含2个元素的2维数组,存数组地址的指针。q=s ; 把 数组 s 的地址存入 q p[0]=s[0] ...

C语言 有关*p=a,**q=&p;的问题
答:q=&p;//此时q指向p printf("%d\n",*(p++));//这句相当于下面的两句的合并:/ printf("%d\n",*p);//按照p寻址并输出,此时p指向a[0],于是输出1 p=p+1;//p指针向前移动,此时p指向a[1],也就是2 / printf("%d\n",**q);//按照q二次寻址输出。q指向p,p指向a[1],于是...

C语言问题 int *p,*q,m=5; p=&m;q=p; 请问指针q=p是什
答:q=p 即将p的值(地址)赋给q,操作完之后 p指向 m;q指向m 操作 *p时 *q的值也会改变

c语言int a[10],*p=a+6,*q=a;下列哪种运算是错误的?A.p-q B.p+3 C...
答:c标准定义,指针的算术运算只限于2种形式,指针+或-整数,指针-指针。这是标准定义的,所以p+q是错误的。p-q是计算两个指针在内存中的距离。此时应该等于6;p>q,因为p的地址在q的后面,所以此表达式为真。

int *p=4;**q; q=&p; 中&p和p分别代表什么?**q怎么理解?
答:在C语言中指针变量也是一个变量,它存在于内存之中,跟普通的int变量没有什么区别。但是指针变量跟int变量的访问方式有一点区别。当你访问int变量时,是直接取变量所占内存中的值。而当你使用*p访问指针变量时,是先取p所占内存中的值,把取出的值当作一个地址,然后再取出新地址的值作为最终值。如下...

在C语言中,*P=a,**q=&p是什么意思
答:p是个指针(一级指针),把a的值赋给p所指向的地址,q是个二级指针(也就是指针的指针),q中保存这p的地址

C语言,求大神指导,不能理解for循环里面的意思。(特别是if语句里的*q=...
答:语法里 这里的 * 号是 “求值运算符”,不是乘号(c/c++奇葩!)。p 指向 c[0] 的地址 &c[0] 时,*p 表示c[0]里存放的 字符的值( ASCII 码值)。p++ 以后,,*p 表示c[1]里存放的 字符的值。指针q 是int型,专门用于指向 整型。这里用来指向 a数组的元素。语句里 *q 表示指向的...