10-22C/C++刷题

1、有以下程序(strcpy 为字符串赋值函数,strcat为字符串连接函数)

#include <stdio.h>
#include <string.h>
main()
{
      char a[10]="abc",b[10]="012",c[10]="xyz";
      strcpy(a+1,b+2);
      puts(strcat(a,c+1));
}

程序运行后的输出结果是a2yz.
解析:C语言标准库函数strcpy,把从src地址开始且含有’\0’结束符的字符串复制到以dest开始的 地址空间。。
从a[1]的地址开始(bc),把b[2]开始的字符复制到a[1],当然字符串结束标志也复制过去了。此时a[10] = “a2\0”;
strcat( a,c+1);把c[1]开始的字符串接过去到a的屁股后面,a[10]=“a2yz\0”。
2、在if语句中,else前一个语句可不加“;”,这句话是错的。
3、如果相邻两个格式控制符之间,不指定数据分隔符(如逗号、冒号等),则相应的两个输入数据之间,至少用一个空格分隔,或者用Tab键分隔,或者输入一个数据后,按回车键,然后再输入下一个数据。而逗号不能作为数据分隔符。
4、
在这里插入图片描述
解析:第四行 逗号表达式中间不能为空,必须要有表达式。
5、在这里插入图片描述
6、在这里插入图片描述
解析:A应该带单引号才是字符。
7、在这里插入图片描述
解析:非常量引用的初始值必须为左值。
理解左右值:看能不能对表达式取地址,如果能,则为左值,否则为右值。左右值都是针对表达式而言,左值是指表达式结束后依然存在的持久对象,右值是指表达式结束时就不再存在的临时对象,在标准C++语言中,临时量(术语为右值,因其出现在赋值表达式的右边)可以被传给函数,但只能被接受为const &类型。
函数形式参数是临时量,是右值。
A中 &a=0;0是常量,用&操作符相当于可以修改常量0对象的值,而常对象的值是不能修改的为了保证安全性,一般会加const A&a=0.
8、若变量已正确的定义为float类型,要通过输入函数scanf(“%f%f%f”,&a,&b,&c)给a赋值10,b赋值22,c赋值33,以下不正确的输入形式是
在这里插入图片描述
9、在这里插入图片描述
解析:非法指针并不只是未分配的内存,而包括所有已经不能访问的内存,例如指向已经返回的函数局部变量,越过数组边界的地址等。两个同类型指针相减有意义,这就是求差,但相加没有意义。
比如两个数组元素一一对应,当我们已知A的X元素,而要找B中与之对应的Y时,就可以使用B+(X-A) 其中X-A就是同类型指针相减,这也是唯一的做法。
10、在c语言中下面哪个语句的结果是1?
在这里插入图片描述
解析:A main函数的返回值,用于说明程序的退出状态。如果返回0,则代表程序正常退出;返回其他数字的含义由系统决定。通常,返回非零代表程序异常退出。
C:p存的是常量字符串“hello”的地址,p==“hello”的值是1。如果改为char p[]=“hello”,呢么p=="hello"的值为0.因为此时p指向了一段
(新开辟的)长度为6的内存区域,存储的值"hello"的拷贝(也就是说不是原来的常量字符串)。如果再修改为char p[]=“hello”; return (strcmp (p,“hello”));则返回1。

猜你喜欢

转载自blog.csdn.net/Cystal_ll/article/details/83269907