结果为A。p1,*p2,*p为三个指针;p1=&a;P2=&b;p1获得a的地址,指向a,p2获得b的地址,指向b;if(a<b) { p=p1;pl=p2;p2=p;},因为5<8,因此执行语句,这是个交换p1,p2指向的语句,所以p1变更为指向b,p2指向a;printf(”%d, %d”,*P1,*P2);表示输出p1,p2所指向位置...
不可能定义a为指针,又为数值因为p为指针变量,它初始化的值只能为地址,例如:int b[10],a;int *p1=b,*p2=&a; //这两种赋值都可以,注意,a,b都是地址,b是数组名,为数组的首地址,若如下定义就是错误的:int *p3=a;//a是简单变量,不是地址,而是值,类型不匹配,所以错了a的类型...
最后再给初学者一个忠告,C的运算符是比较复杂的,而且不同的编译系统对源程序的解释也不尽相同,所以,建议不要在这种问题上钻牛角尖。对不确定的东西,分多句写,或者加上括号,否则很容易被带沟里去。比如上面的语句,完成可以写在*(--p);或者分两句写成p--;*p这样子。如果有人专门考别人这些...
include <stdio.h>int main(){int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, *p = &a[3], b; b = p[5];printf("%d\n", b);} 因为*p=&a[3]; 表明将a[3]的地址赋值给p,此时p[0]=a[3],因此p[5]=p[0+5]=a[3+5]=a[8]。
A、scanf(“%d”,p) //正确! p是内存的地址,此句可向p指向的地址存入整数 B、scanf(“%d”,&p) //这是向p中存储数据,改变的是p本身的值,错!C、scanf(“%d”,**p) //严重错,*p是一个整数,**p是个未知世界!D、scanf(“%d”,*p) //*p是一个整数,不是内存地址,sc...
B)赋值语句的顺序是自有向左的,1无法赋值给a+b,所以错误 C)相当于j=0;i=j;k=i;正确 第二题:A)强制转化语句应该是类型两侧写括号,正确的写法应为y=(float)i;B)相当于a=3;b=(float)i*a;所以正确 C)p是地址,而i是内容,内容是不能赋值给地址的,正确的写法应为*p=i;没...
【答案】:A 本题考查逻辑与运算“&&”与逻辑或运算“||”。在选项A中,因为!a=0,所以关系表达式!a=1 为0,又因为逻辑与运算符“&&”两边的表达式只要一个等于零,则整个表达式为零,所以选项A正确。在选项8中,关系表达式a<b为真,表达式(a<b)&&!C为假,而表达式(a<b)&&!||1...
1.int a[10],*p;p=a;//a是首地址2.int a[10],*p=a;//定义时赋值3.int a[10],*p;p=&a[0];以上都是等效的,没有p=&a的谭浩强是说前者对p=&a,是把a的地址赋给p,再通过*p得到a所赋给p的地址,取a里面的内容 ,对于数组的话好像两个都对的,我用VC6.0编译的时候都通过的不...
不信可以自己写程序试试……扩展一下,考虑下面这个表达式:int x,a,b,c;x = (a = 5, b=a++,c=++a,456,789);//肯定先从括号中开始算起。//a刚开始等于5 //b=a++,++运算在后,先算后加,先把a的5给b,然后把a加1,此时b为5,a为6 //c=++a,++运算在前,先加后算,因为...
include"stdio.h"main(){ inta,b,c,t;printf("pleaseinputa,b,c:");scanf("%d,%d,%d",&a,&b,&c);t=a;a=b;b=c;c=t;printf("%d,%d,%d",a,b,c);getch();}