C&C++专项小练(三)

专项小练(三)

1 函数形参

形参与实参:C语言中,所有函数参数都是"通过值"传递的,传递给被调用函数的参数值存放在临时变量中,被调用函数不能直接修改主调函数中变量的值,而只能修改其私有的临时副本的值
指针参数:调用者可向被调用函数提供带设置值的变量地址即指针变量,被调用函数将对应参数声明为指针类型,并通过它间接访问;
数组参数
:当把数组名用作参数时,传递给函数的值是数组起始元素的位置或地址,通过数组下标可访问或修改数组元素的值。

函数调用语句func(rec1,rec2+rec3,(rec4,rec5));中的实在参数的个数是( 3 )。
函数调用的形式: 函数名(实参1,实参2,实参3 ,… ,实参n)
实参可以是具有确定值的常量、变量、表达式、函数等,rec1是一个变量。rec2+rec3是一个表达式。(rec4,rec5)为逗号运算符,优先级别最低,逗号表达式的值是最后一个表达式的值。

2 若整型变量x的初值为6,则计算表达式“x+=x-=x*x”之后,x的值是(-50)
考察赋值运算符
赋值运算是从右往左,

x+=x-=x*x  x=6
x*x=36
x-=x*x  即为x=x-x*x,此时x=6-36=-30
x+=x-=x*x  即为x=x+(-30)  =-30+(-30)=-60

3 以下哪个属于在预编译阶段执行____,以下哪些指令属于操作符___

a:malloc; 
b:++; 
c:#pragma;  
d:sizeof;   
e:#define

预编译c,e 操作符b,d
带#的肯定是预编译指令了,故c和e预编译;sizeof为操作符,如"+,-"等,malloc为函数,参数为字节数,返回一个void* 指针。

4 若a、b、c1、c2、x、y均是整型变量,正确的switch语句

switch(a+b)
{
case 1:y=a+b;break; 
case 0:y=a-b;break;
case 3:y=b-a;break;
}

考察点:switch语句格式
5 静态外部变量只在本文件内可用
静态变量
静态变量如何跨文件访问?
走位崴了脚:全局变量(函数外定义)分为:(1)静态全局变量(外部静态变量,static int a;)和(2)外部全局变量(extern int a;),extern可以省略。静态全局变量的作用域为本文件,限制别的文件访问,外部全局变量可以被其他文件引用
说法是否有误??
6 程序中, int32-t 表示一个有符号的 32 位整数,程序的入口是 main 函数,问最终 res 的结果是多少?

int32_t f(int_32_t a,int32_t b){
	while(a+b>0){
		a = a+1;
		b = b+1; 
	}
	return a+b;
}
int32_t main(){
	int32_t res = f(1,0);
}

TheBestIsYetToCome-
@ 羽落长安 的解析不错,以char为例
f(1,0):
a=2 b=-1
a=3 b=-2

a=127 b=-126
a=128 b=-127 溢出–>a=-128 b=-127 char范围:-128~127
return a+b:-128-127实际上是1(char范围),继续循环
而原例为int_32t,临界情况 a+b: -232+(-232+1)=1,也继续循环。
因此死循环。

unsigned int、int32_t long int???

7


int a[3];
a[0] = 0; a[1] = 1; a[2] = 2;
int *p, *q;
p = a;
q = &a[2];
 
则a[q - p] = ?

yj129
这里q-p的实际运算是:(q的地址值-p的地址值)/sizeof(int),所以为2.
基础数据类型在32、64位操作系统?(处理器)中差异
怎么不同位数处理器中是怎么存储及运算的?
举例在 32 位编译器上,设有定义
char *str1 = “Hello”, str2[] = “Hello”; ,
则以下语句 printf("%d %d", sizeof(str1), sizeof(str2)); 的输出结果是(4,6)
考查了指向字符串的指针和字符数组, str1 为一个字符指针,所以 sizeof 为 4 , str2 为字符数组,其中包含 6 个字符,所以答案为 4 6 。
8 引用可以是void类型吗?
不可以
huixieqingchun
引用只是一个别名,是已有变量的别名,而void类型是空类型,是没有分配内存的。所以引用不能是void类型

8 7&3+12的值是15。请问这个说法是正确的吗?错误
考察C语言运算符优先级

1.     ()    []     .     ->
2.     !     ~     ++     --     +     -     *     &  (type) sizeof
3.     *     /     %
4.     +     -
5.     >>    <<
6.     >     >=     <     <= 
7.     ==    !=
8.     &
9.     ^
10.    |
11.    &&
12.    ||
13.    ? :
14.    =     *=     /=     %=     +=     -=     >>=     <<=     &=     ^=     |= 
15.    ,

9 程序指向结果

  #include "stdio.h"
 
class A
{
public:
    virtual void Test()
    {
        printf("A test\n");
    }
};
class B: public A
{
public:
    void func()
    {
        Test();
    }
    virtual void Test()
    {
        printf("B test\n");
    }
};
class C: public B
{
public:
    virtual void Test()
    {
        printf("C test\n");
    }
};
void main()
{
    C c;
    ((B *)(&c))->func();
    ((B)c).func();
}

查考虚函数

kchenhao
查阅了各种资料,我来说一下我的看法吧:
(1)((B *)(&c))->func():编译阶段,系统发现B类型有一个非虚函数func,静态绑定,相当B::func((B *)(&c)),传入的this指针是B类型。在func内部调用this->Test(),由于Test是虚函数,动态绑定,通过虚函数表调用C::Test()。
(2)((B)c).func():强制类型转换发生对象切割,相当于用C初始化一个临时对象Btemp,vptr指向B的虚函数表,等价于Btemp.func()。根据静态绑定,调用B::func((B *)Btemp),在func内部调用this->Test(),Test是虚函数,动态绑定,通过虚函数表(注意此时的虚函数表是B)调用B::Test()。

10 由3 个“1”和 5 个“0”组成的 8 位二进制补码,能表示的最小整数()
既然求最小整数,那肯定先想到负数,则最高位(符号位)一定为1,原码中肯定是1所在的位数越高,值越小,而补码是由原码取反加1得到的,则在补码中1所在的位数一定要越低,即补码为1000 0011;由补码求得原码:1111 1101=-(64+32+16+8+4+1)=-125;
考查原码、补码、反码概念及???

11 一张1024×640分辨率的图片,假定每个像素用16位色彩表示,用位图文件(bitmap)格式存储,则这张图片文件需要占用多大的存储空间_
102464016 bit = 102464016/8 B = 102464016/8/1024 KB = 1280KB

12 在32位系统中,下面程序打印结果为()

#include<iostream>
using namespace std;

class A
{
char a[3];
public:
virtual void fun1(){};
};

class B : public virtual A
{
char b[3];
public:
virtual void fun2(){};
};

class C : public virtual B
{
char c[3];
public:
virtual void fun3(){};
};

int main ()
{
cout << sizeof(A) << endl;
cout << sizeof(B) << endl;
cout << sizeof(C) << endl;
return 0;
}

13代码输出,print已声明

main(){     
    char str[]="Geneius";
    print (str);
} 
print(char *s){
  if(*s){
       print(++s);
       printf("%c",*s); 
}
}

有两个知识点,一个是递归,相当于栈是FILO,另一个考察点是print(++s),指针先移动然后调用函数。

14 #if defined() 和#if !defined()指令简写#ifdef #ifndef

阿道夫

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值