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

来源:百度知道 编辑:UC知道 时间:2024/09/18 05:34:34
西西今天问的问题可真多啊 - -||
谢谢大家帮忙看看
已知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的,我打得累死了。。请大家不吝指教,最好有过程,西西谢谢各位大虾了

1.
指针可以进行递增,递减,比较。
指针可以做加,减运算。
如果两个指针指向相同的类对象,那么它们可以彼此相减。
当然,这里假定正在进行逻辑上正确的运算。
不允许下列对指针的运算:
指针与常量相乘
指针被一个常量来除
两个指针相乘
一个指针除以另一个指针
常量减去指针
两个指针相加

综上所述,选b

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

第一个:

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

第二个:

p1和p2都是指针,调用他们不需要用&的,所以首先排除A
*p1是取出了p1的值,所以*p1=*p2也是错误的,这样就排除了B和D
C是正确的

已知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型变量此