c语言选择题。。。会的来。。

西西今天问的问题可真多啊 - -||
谢谢大家帮忙看看
已知char *p,*q;选择正确的语句()
A.p*=3 B.p/=q C.p+=3 D.p+=q;
看了这道题我狂汗~~~~觉得ABCD都是对的。。。但是答案是c

若有说明:int *p1,*p2,m=5,n;以下均是正确赋值语句的选项是()
A.p1=&m;p2=&p1;
B.p1=&m;p2=&n;*p1=*p2;
C.p1=&m;p2=p1;
D.p1=&m;*p2=*p1;

这道题答案也是c
但是我就是不知道为什么,
都不是ctrl+v的,我打得累死了。。请大家不吝指教,最好有过程,西西谢谢各位大虾了

已知char *p,*q;选择正确的语句()
A.p*=3 //这个就只能理解为p=p*3,指针只允许加减操作
B.p/=q //指针之间不能互相乘除
C.p+=3 //p=p+3,正确
D.p+=q; //只允许指针和常整数之间的加减
所以:答案是c

若有说明:int *p1,*p2,m=5,n;以下均是正确赋值语句的选项是()
A.p1=&m;p2=&p1;//p1=&m;这个可以,即p1指向int型的5,p2=&p1,这个不行,p2是指向int型变量的指针,p1不是int型的变量,它是 int * 型的 ,所以错
B.p1=&m;p2=&n;*p1=*p2; //n的值未知,不能将n的值赋值给m,反过来可以
C.p1=&m;p2=p1;//正确的使用方法,p1、p2都指向m
D.p1=&m;*p2=*p1; //p2指向的int型变量此时是未知的,不能给未知的变量赋值吧
所以选C

希望楼主能明白了吧
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-08-12
1.
指针可以进行递增,递减,比较。
指针可以做加,减运算。
如果两个指针指向相同的类对象,那么它们可以彼此相减。
当然,这里假定正在进行逻辑上正确的运算。
不允许下列对指针的运算:
指针与常量相乘
指针被一个常量来除
两个指针相乘
一个指针除以另一个指针
常量减去指针
两个指针相加

综上所述,选b

2.
A.p2是指针,无法将一个指针的地址付给它,除非它被声明为指向指针的指针。
B.p2是指向n的指针,而n是没有初始化的变量,讲不确定的一个变量值赋给其他变量是很危险的操作。
D.p2只不过是声明过了,但并没有指向明确的内存空间,给它赋值就会出现空指针异常。本回答被提问者采纳
第2个回答  2008-08-12
第一个:

p和q都是指针,所以p+=3是将指针移动3个位置,而p是不能进行运算的,所以ABD都是错的

第二个:

p1和p2都是指针,调用他们不需要用&的,所以首先排除A
*p1是取出了p1的值,所以*p1=*p2也是错误的,这样就排除了B和D
C是正确的
第3个回答  2008-08-12
1. 你定义的是指针形 p和q都 是地址,A肯定不对嘛 地址是不能乘除的。C就是相当于从现在的地址开始 向下移动三个字节,所以C是正确的答案
2. 这也是一个指针问题呀。指针只能赋地址,只要你知道这个就可以了,A中p2=&p1是错的。他相当于是把指针的地址给我p2.那么要定义 p2是int **p2这样才对。所以答案是选C。 B中p2=&n是错的。D中*p2=*p1;是错的。
第4个回答  2008-08-12
第一题 注意是两个指针 对于指针只能进行加减整数的操作 效果相当于将指针移动多少它所指类型长度的单位 比如char占1字节 所以p+=3就是将p所指地址向后移动3字节

第二题 A p1本身就是指针了 所以&p1之后的类型应该是int **而不是int *
B *p1得到的是p1指向的值 不是一个变量 不能被赋值
D 同B
相似回答