没有合适的资源?快使用搜索试试~ 我知道了~
错题整理(主要以C++为主)1
需积分: 0 0 下载量 61 浏览量
2022-08-08
22:23:37
上传
评论 1
收藏 562KB DOCX 举报
温馨提示
试读
64页
1、以下不能正确定义二维数组的选项是 5、C++语言不能定义字符串变量 8、函数参数使用的空间是在()中申请的,malloc或new是在()中申请空间的
资源详情
资源评论
资源推荐
1、以下不能正确定义二维数组的选项是______。
正确答案: D 你的答案: B (错误)
A、int a[2][2]={{1},{2}};
B、int a[][2]={1,2,3,4};
C、int a[2][2]={{1},2,3};
D、int a[2][]={{1,2},{3,4}};
对于二维数组,行数可以省略,但列数一定要指定,因为编译器根据列数来进行寻址
2、若有定义 int(*pt)[3];则下列说法正确的是:
正确答案: D 你的答案: B (错误)
A、定义了基类型为 int 的三个指针变量
B、定义了基类型为 int 的具有三个元素的指针数组 pt
C、定义了一个名为*pt、具有三个元素的整型数组
D、定义了一个名为 pt 的指针变量,它可以指向每行有三个整数元素的二维数组的某
一行
int (*pt)[3],首先看括号内,*pt 说明 pt 是一个指针,其指向的内容是 int[3],具有 3
个 int 元素的数组。
D 选项说,可以指向每行有三个整数元素的二维数组,即 int[][3]。
int(*pt)[3] = NULL;
int arr[2][3] = {0};
pt = arr;
3、以下函数用法正确的个数是:
void test1()
{
unsigned char array[MAX_CHAR+1],i;
for(i=0;i<=MAX_CHAR;i++){
array[i]=i;
}
}
char*test2()
{
char p[] = "hello world";
return p;
}
char *p =test2();
void test3(){
char str[10];
str++;
*str='0';
}
正确答案: A 你的答案: C (错误)
A、0
B、1
C、2
D、3
第一个问题:
重点不在于 CHAR_MAX 的取值是多少,而是在于 i 的取值范围是多少。
一般 char 的取值范围是-128 到 127,而 u char 则是 0~255,所以 i 的取值范围是
0~255.
所以当 CHAR_MAX 常量大于 255 时,执行 i++后,i 不能表示 256 以上的数字,所以导
致无限循环。
第二个问题:
重点在于函数中 p 的身份,他是一个指针,还是数组名;
如果是指针 p,则 p 指向存放字符串常量的地址,返回 p 则是返回字符串常量地址
值,调用函数结束字符串常量不会消失(是常量)。所以返回常量的地址不会出错。
如果是数组 p,则函数会将字符串常量的字符逐个复制到 p 数组里面,返回 p 则是返
回数组 p,但是调用函数结束后 p 被销毁,里面的元素不存在了。
例子中 p 是数组名,所以会出错,p 所指的地址是随机值。
若是把 char p[]="hello";改成 char *p="hello";就可以了。
第三个问题:
重点在于 str++;这实际的语句就是 str=str+1;而 str 是数组名,数组名是常量,所以不能
给常量赋值。(可以执行 str+1,但是不能 str=.)
4、下面程序段的输出结果是
char *p1 = ”123”, *p2 = ”ABC”, str[50] = “xyz”;
strcpy(str + 2, strcat(p1, p2));
printr(“%s\n”, str);
正确答案: D 你的答案: C (错误)
A、xyz123ABC
B、z123ABC
C、xy123ABC
D、出错
原代码有错:p1 和 p2 都指向常量字符串,在常量区,所以不能对其进行操作;改为
数组即可,但是用字符串初始化数组时要记得将数组长度加 1,因为字符串默认的末
尾有一个‘\0’;第二点要注意的是,strcat 函数的 p1 要有足够的空间来容纳 p1 和 p2 连
接后的串长。
修改为以下代码将可以:
char p1[7] = "123";
char p2[] = "ABC";
char str[50] = "xyz";
strcpy(str + 2, strcat(p1, p2));
printf("%s\n", str);
5、C++语言不能定义字符串变量。
正确答案: B 你的答案: A (错误)
A、是
B、否
6、下面 C 程序的输出结果:
int i=0,a=1,b=2,c=3;
i=++a||++b||++c;
printf("%d %d %d %d",i,a,b,c);
正确答案: A 你的答案: B (错误)
A、1 2 2 3
B、1 2 3 4
C、3 2 3 4
D、3 3 3 4
6、下列 C 代码中,不属于未定义行为的有:______。
正确答案: C 你的答案: B (错误)
A、int i=0;i=(i++);
B、char *p=”hello”;p[1]=’E’
C、char *p=”hello”;char ch=*p++
D、int i=0;printf(“%d%d\n”,i++ i--)
未定义行为(Undefined Behavior)是指 C 语言标准未做规定的行为。同时,标准也从没
要求编译器判断未定义行为,所以这些行为有编译器自行处理,在不同的编译器可能会产
生不同的结果,又或者如果程序调用未定义的行为,可能会成功编译,甚至一开始运行时
没有错误,只会在另一个系统上,甚至是在另一个日期运行失败。当一个未定义行为的实
例发生时,正如语言标准所说,“什么事情都可能发生”,也许什么都没有发生。一句话,
未定义行为就是运行结果不确定
1.变量即是左边结果,又是右边的操作数,如 a+=a++,a %= b ^= a ^= b ^= a
2.使用越界数组也是 C 的一个“未定义行为”
3.允许一个随便指的指针的读写。
4.使用未初始化的变量
等等
7、下面关于虚函数的描述,错误的是
正确答案: B 你的答案: C (错误)
剩余63页未读,继续阅读
glowlaw
- 粉丝: 22
- 资源: 275
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0