1、数组名作为参数传递给函数,作为该参数的数组名被处理为(该数组的首地址)。

分析:
数组名就是数组的首地址。
用数组名做函数参数时所进行的传递实际上是地址的传递,也就是把实参数组的首地址赋予形参数组名。
形参数组名取得该首地址后,也就等于有了具体的地址。实际上是形参数组和实参数组为同一数组,共同使用一段内存空间。

2、假设有一个C++类名为Thunder,则此类的析构函数为(~Thunder())。

分析:
C++当中的析构函数格式如下:

class <类名>
{

    public:

          ~<类名>();

};

3、 while (!x)!x表示“非”,是一种逻辑运算。若x的真值为1,则!x为0;若x的真值为0,则!x为1。

4、由C++源程序文件编译而成的目标文件的缺省扩展名为(obj)。

分析:
生成目标文件的缺省扩展名为:.obj
生成可执行文件的缺省扩展名为:.exe

编译:当前源代码编译成二进制目标文件(.obj文件)
链接(link):将生成的.obj文件与库文件.lib等文件链接,生成可执行文件(.exe文件)。

一个现代编译器的主要工作流程如下:
源程序(source code)→ 预处理器(preprocessor)→ 编译器(compiler)→ 汇编程序(assembler)→ 目标程序(object code)→ 连接器(链接器,Linker)→ 可执行程序(executables)

5、下面程序执行的结果为( I 8 )

void main( ) 

{ 
     char ch1,ch2;

     ch1 ='D'+'8'-'3';
     ch2 ='9'-'1';

     printf("%c %d\n",ch1,ch2);
}

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

分析:
1KB=1024B(Byte,字节),而1字节=8位
1024*640*16/1024/8=1280KB

7、【没看懂】下面是一段c程序:

void foo(int b[][3])
{

     ++b;

     b[1][1]=9;

}

void main()
{

     int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};

     foo(a);

     printf(“%d”,a[2][1]);

}

这段程序的输出是(9)

分析:

1、C/C++传递的数组会退化成指针

2、对于数组指针的++,会根据数组中存储的内容,调整指针。

因为b是二维数组,b的类型是int(*)[3],即指向一个容量为3的一维int数组;所以++b相当于移动了数组的一整行。此时b指向了b[1][0]处,然后我们代码的b[1][1] = 9可以看成指针的偏移。实际上可以化为*(*(b+1)+1)= 9,因为b不是指向b[0][0]处,而是指向b[1][0]处,所以通过*(*(b+1)+1)= 9实际上修改的是b[2][1]处的内容。修改成了9. 所以最后打印a数组同样的位置时,打印的是9

8、

char* getmemory(void)
{
    char p[]=”hello world”;
    return p;
}
void test(void)
{
    char *str=NULL;
    str=getmemory(); printf(str);
}

请问运行Test 函数会有什么样的结果? 输出乱码

分析:
getmemory返回的指针,是内部变量,调用之后会被回收。 所以输出是不确定的。如果定义成char* p =”hello world”;返回常量区地址是可以得到正常打印的。

9、C++中32位单精度浮点数能表示的十进制有效数字是多少位?(7)

分析:
单精度浮点数的有效位数是7位。
双精度浮点数的有效位数是16位。