正确
看到题目我想到的就是函数指针,比如说int (*p)(int ,int),p是个函数指针变量,它的类型其实就是函数类型,而且也可以赋值
请将B类的构造函数补充完整,要求用x初始化a.请为横线处选择合适的程序( )class A
{ int a;
public:
A(int x=0) { a=x; } };
class B: public A {
int b;
public:
B(int x): ______________
{ b=x+1; } };
正确答案: B 你的答案: B (正确)
a(x)
A(x)
B(x)
a=x
公共继承派生类”只能通过“”基类的成员函数”去访问“”基类的私有成员
C语言中,设a=3,b=4,执行语句“printf("%d,%d",(a,b),(b,a));”的输出结果是()正确答案: C 你的答案: 空 (错误)
3,4
(3,4),(4,3)
4,3
不确定
注意 (a ,b)并不是一个数对,而是一种运算–逗号表达式。
运算方法:从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值(右括号左侧)。
故:( a,b ) = b, ( b, a ) = a.
printf("~A = %un", ~A);
char c = 128;
printf(“c=%dn”, c);
输出多少?
4294967285 -128
反码 = 源码除了符号位以外按位取反。补码 = 反码+1。
关于符号扩展
一、短数据类型扩展为长数据类型
1、要扩展的短数据类型为有符号数的
进行符号扩展,即短数据类型的符号位填充到长数据类型的高字节位(即比短数据类型多出的那一部分),保证扩展后的数值大小不变
如1:char x=10001001b; short y=x; 则 y 的值应为 11111111 10001001b ;
2 : char x=00001001b; short y=x; 则 y 的值应为 00000000 00001001b ;
2、要扩展的短数据类型为无符号数的
进行零扩展,即用零来填充长数据类型的高字节位
如1:unsigned char x=10001001b; short y=x; 则 y 的值应为 00000000 10001001b ;
2 : unsigned char x=00001001b; short y=x; 则 y 的值应为 00000000 00001001b ;
shor和char的无符号和有符号形式都会先转换为int型。
unsigned short A=10转换为int型类0x0000000a,按位取反为0xfffffff5,若按%d形式输出,由于是补码形式存储的,所以0xfffffff5的原码为0x8000000b,也就是-11;此时是按%u无符号形式输出,结果为15167+15166+15*165+15164+15*163+1516^2+1516+5=4294967285;
char c=128先转化为int类型,为0xffffff80,以%d输出,转换为原码为0x80000080,也就是-16*8=-128
int a=21,b=11;
printf("%dn",–a+b,–b+a);
30
printf()从右到左压栈,从左到右输出。
是从右往左计算表达式的,所以计算两个表达式:
–b+a, b=10, a=21, 结果31(前缀自加自减,先自加自减再参与运算)
–a+b, a=20, b=10, 结果30
但输出时是从左往右输出的即输出–a+b的结果,30
1.p=s;
2.p=k;
3.p=s[0];
4.k=s;
124
这道题主要就考指针类型是否一样。
char s[3][10] s 是数组指针,类型为char (*)[3],所指向的每个数组长度为10;
char (k)[3] 很明显k就是一个数组指针,类型也为 char ()[3],但是所指向的每个数组的长度未知;
char *p 类型为char * 指针。
因此,在没有强制类型转换的情况下,只有类型完全相同的指针才能相互复制。
答案:1,2,4
—— —— —— ——3为什么正确?—— —— ——
s[0] 是指向第一行数组的首元素的地址,即s[0] == &s[0][0],指针类型为char *,因此可以与char * p进行复制操作。



