C语言试题十道(第四期)
作者:互联网
1.代码段
#include <stdio.h>
int main() {
int i = 1;
sizeof(i++);
printf("%d\n", i);
return 0;
}的输出为()
-
1
-
4
-
2
-
8
正确答案: A
解析:
根据C99规范, sizeof是一个编译时刻就起效果的运算符,在其内的任何运算都没有意义,
sizeof(i++); 在编译的时候被翻译成
sizeof((i++的数据类型)) 也就是 sizeof(int); 不会执行i++了。
sizeof是运算符,它在编译时起作用,而不是运行时。
也就是说,在编译时,就得到了sizeof(int),运行时,i++根本没有执行过。
2. 补充下面函数代码:
如果两段内存重叠,用 memcpy 函数可能会导致行为未定义。 而 memmove 函数能够避免这种问题,下面是一种实现方式,请补充代码。
#include <iostream> using namespace std; void *memmove(void *str1, const void *str2, size_t n) { char *pStr1 = (char *)str1; char *pStr2 = (char *)str2; if () { for (size_t i = 0; i != n; ++i) { *(pStr1++) = *(pStr2++); } } else { pStr1 += n - 1; pStr2 += n - 1; for (size_t i = 0; i != n; ++i) { *(pStr1--) = *(pStr2--); } } return (); }
pStr1 < pStr2 str1
pStr1+n < pStr2 str2
pStr1+n < pStr2 || pStr2+n < pStr1 str2
pStr2+n < pStr1 str1
正确答案:A
解析:
原型:void *memmove( void* dest, const void* src, size_t count );
头文件:<string.h>
功能:由src所指内存区域复制count个字节到dest所指内存区域。
如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。
当pStr1< pStr2时,即 pStr1的首地址小于 pStr2的首地址,正序拷贝
当pStr1> pStr2时,即 pStr1的首地址大于 pStr2的首地址,倒叙拷贝
3.
在 C 语言中,C99除外,一维数组的定义方式为:
元素类型 数组名[E];
E 为( )。
常量表达式
整型表达式
整型常量或整型表达式
整型常量表达式
正确答案:D
4.设有 int x=11; 则表达式 (x++ * 1/3) 的值是( )
3
4
11
12
正确答案:A
解析:
x++是在;之后执行的,相当于(x*1/3);x++;
(x*1/3)表达式算出的结果值为Int类型,自动去小数点
结果为3
5.以下正确的函数原型为()
f1( int x; int y );
void f1( x, y );
void f1( int x, y );
void f1( int, int );
正确答案;D
解析:
函数原型:指明函数的名字,返回的类型,有几个参数,这几个参数是什么类型,不需要函数体,也不需要形式参数的名字,其中用分号作为原型的结束符。
6.
执行下面代码后
1 2 |
|
后sum的值为( )
7
8
9
10
正确答案:B
解析:
sum = num ++ .到这里为止,和后面的++num. sum++完全是2段语句。
所以第一段。num++ 先赋值 7 给 sum, 再给自己加1.
此时 sum =7, num =8.
第二段:sum++,++num, 各自给自己加一。
结果 sum =8, num = 9
7.对于char *pa[7]的描述中,正确的是( )
pa是一个指向数组的指针,所指向的数组是7个char型元素
pa是一个指向某数组中第7个元素的指针,该元素是char型变量
pa[7]表示数组的第7个元素的值,是char型的值
pa是一个具有7个元素的指针数组,每个元素是一个char型指针
正确答案:D
8.在C++, 基类至少含有一个虚函数时,下列哪一个可以做为对象继承之间的转换
static_cast
dynamic_cast
const_cast
reinterpret_cast
正确答案:B
解析:
dynamic_cast :
继承体系安全向下转型或跨系转型;找出某对象占用内存的起始点
static_cast:
同旧式C转型,如int 到double
const_cast:
常用于去除某个对象的常量性
reinterpret_cast
不具备移植性,常见用途是转化函数指针类型
9.下列叙述正确的是:
预处理命令行必须位于源文件的开头
在源文件的一行上可以有多条预处理命令
宏名必须用大写字母表示
宏替换不占用程序运行时间
正确答案:D
解析: 预处理指令指示在程序正式编译前就由编译器进行的操作,可放在程序中任何位置。源文件的每一行只能有一条预处理命令,如果指令一行放不下,可以通过反斜杠“/”进行控制。宏名通常由大写字母表示,而非必须宏是在预编译期间进行的,将代码中的指定字符转换,转换结束后,再进行编译,所以不占用程序运行时间
10.
对于代码段
1 |
|
则对data中的a成员的正确引用是()
(*p).data.a
(*p).a
p->data.a
p.data.a
正确答案:B
解析:
1、如果是指针指向结构体,就用 -> (“形状像个箭头,表示指向,记为指针访问结构体成员的方式”)
2、结构体类型名访问结构体成员变量 用,成员访问运算符
标签:第四期,++,sum,C语言,int,十道,pStr2,pStr1,void 来源: https://blog.csdn.net/am_student/article/details/121689199