牛客C/C++刷题笔记(一)
迪丽瓦拉
2025-05-31 23:06:58
0

1、下面关于delete描述错误的是(C)
A 它必须用于new返回的指针
B 使用它删除对象时要调用析构函数
C 对一个指针可以使用多次该运算符
D 指针名前只有一对方括号符号,不管所删除数组的维数

解析:不能对一个指针使用多次 delete。因为 delete 以后,此内存已经被收回,可能被分配用于其它数据,因此再次 delete 导致其它数据被非法修改,这是一种不确定的行为。
delete 用于释放 new 创建的内存,delete [] 用于释放 new 创建的数组内存。delete 后面只能跟上 new 返回的指针变量。
使用 delete 释放对象内存时会调用对象的析构函数。

2、函数rewind的作用是

使位置指针重新返回文件的开头

3、
在这里插入图片描述

b=2, c=3
a=-1,表达式的值为-1,非零,为真,故b=2;
a=0,表达式的值为,为零,为假,故c=3;

4、下面的类型声明中正确是(D)

A int & a[4];
B int &=p;
C int &&q;
D int i,*p=&i;

C++中不能建立引用数组和指向引用的指针,也不能建立引用的引用。

5、#include 与 #include "file.h"的区别?

前者首先从Standard Library的路径寻找和引用file.h,而后者首先从当前工作路径搜寻并引用file.h

6、若用数组名作为函数的实参,传递给形参的是数组第一个元素的值。请问这句话的说法是正确的吗?
错误

代表的是该数组最开始的一个元素的地址,等同于可以运算的指针,而不是固定的第一个数组元素。

7、

void test(void *data) {unsigned int value = (此处应填入)printf("%u", value);
}
using namespace std;
int main() {unsigned int value = 10;test(&value);return 0;
}

*((unsigned int *)data)
参数类型是void, 所以先要进行指针转换:(unsigned int *)然后再取值。

8、阅读下面代码,程序会打印出来的值是?

#include void f(char **p) { *p += 2; }
void main() {char *a[] = {"123", "abc", "456"}, **p;p = a;f(p);printf("%s", *p);
}

3
p+=2;就相当于p=p+2; 其中p指向字符串“123”的第一个元素,即‘1’,指针p向后移两个元素的地址,即指向‘3’ 而*(p+2)才是基于p每次向后移一个字符串的长度,即*(p+2)指向“456”

9、C 语言俗称"低级语言的高级形式",这说明C 语言的功能不强。请问这句话的说法是正确的吗?

错误
语言的高级还是低级与语言的功能无关,他的判别标准是相对于自然语言和机器语言的接近程度而言的。
越接近自然语言的语言越高级,反之,越接近机器语言的就越低级。
通常情况下,越低级的语言机器执行效率越高,但对编程者的要求也更高,可自行对比汇编和python。

10、下面程序的输出结果是()

#include 
using namespace std;
int i = 0;
int fun(int n) {static int a = 2;a++;return (a * n);
}int main() {int k = 5;{int i = 2;k += fun(i);}k += fun(i);cout << k;return (0);
}

11
当局部变量和全局变量重名时,局部变量会屏蔽全局变量
{ } 也能组成一个作用域,所以在{ }内 调用的是 int i = 2 而出了作用域 则是调用了全局的i
静态局部变量相当于全局变量(只是只有在这个函数中能访问,但是生命周期是和全局变量差不多的),函数退出之后变量还在,而且只在第一次进入的时候做初始化,以后会跳过初始化语句,保留原来的值(也就是说,如果a是static的,那么只有在第一次进入这个函数的时候会执行a=2,以后都不会执行。)。

11、在c语言中,一个函数不写返回值类型,默认的返回类型是
int

一个函数没有返回值时,是void型,此时的void关键字不能省略(不写);
一个函数省略(不写)返回值类型时,默认是int型;
在这里插入图片描述

12、fread(buffer, size, count, fp);,其中buffer代表的是

一个指针,指向要读入数据的存放地址

13、对类中声明的变量,下列描述中正确的是

属于该类,某些情况下也可被该类不同实例所共享
C++对于类成员具有三种访问权限控制,私有类型不能实现任意实例的随意访问

14、int (*p)[3] 中p的含义是什么?

一个指向元素个数为3的int数组的指针

15、以下不正确的定义语句是

char c2[] = {'\x10', '\xa', '\8'};

\xhh,表示asc码未十六进制数hh所代表字符。 \xddd,表示asc码未八进制数hh所代表字符。
单纯的反斜杠默认为八进制,为0-7,不会出现8

16、在32位系统环境,编译选项为4字节对齐,那么sizeof (A)和sizeof (B)是

struct A {int a; //4short b;  //2int c;  //4char d;  //1
};struct B {int a;   //4short b;   //2char d;    //1int c;   //4
};

16,12

17、有以下语句定义

int x =5;
const int * const p = &x;
const int &q=x; 
int const *next=&x;
const int *j=&x;

则有语法错误的是()
在这里插入图片描述

谁在 const 右边,谁不能改变
去掉类型名
const 右边是 * 变量名,则 *变量名 不能修改;
const 右边是 变量名,则 变量名 不能修改;
eg:
int const val; 和 const int val; val++是错误的
int const *val; 和 const int * val; (*val)++是错误的

18、有以下程序

int main() {char a, b, c, d;scanf("%c,%c,%d,%d", &a, &b, &c, &d);printf("%c,%c,%c,%c\n", a, b, c, d);return 0;
}

若运行时从键盘上输入:6,5,65,66<回车>。则输出结果是()
在这里插入图片描述

char型数据以%d输入时,输入的是ascii码值;c中存入的是ascii码65,也就是A;
而对于a,是以字符型存入,相当于char a = 6;6在a中存储是字符型的,最终输出的也是字符6;
而实际中,字符6的ASCII码是54,若:printf(“%d\n”,a);输出就是54

19、以下程序的输出结果(32位机器上)是()

int main(){char *p = "abcdefgh", *r;long *q;q = (long*)p;q++;r = (char*)q;printf("%s\n", r);
}

在这里插入图片描述

char* p = “abcdefgh”,每个字符占1个字节,那么总共是8个字节,此时p指向’a’。如果是p++,那么p将指向’b’。打印p会得到"bcdefgh"。
long* q = (long*)p 将p强制转换为long*类型,也就是用long类型去解释存储了"abcdefgh"的这一段内存,此时q指向’a’,由于long类型是4个字节,那么q++移动4个字节,q将指向’e’,打印q将得到"efgh"。

20、运行该程序的输出结果是()

int main() {int y=3,x=3,z=1;printf("%d%d\n",(++x, y++), z+2);
}

在这里插入图片描述

逗号表达的求值顺序是从左向右以此计算用逗号分隔的各表达式的值,
最后一个表达式的值就是整个逗号表达式的值,所以(++x,y++)的值将是y++,
因为是先输出y的值,再将y增1,所以轴线输出3,再输出Z+2的值,即3;所以应选择D

21、在x86的机器上执行:

int a = 0xabcd1234; 
char b = ((char*)&a)[0];

请问b是多少
在这里插入图片描述

x86是小端存储,即高位存储在高地址,低位存储在低地址。
int a = 0xabcd1234;
内存中 ab cd 12 34,b作为一个char,右边表达式指针指向为0x34.
高 --> 低
记住小端模式与正常读写顺序相反就够了

22、以下变量的定义,正确的是()
在这里插入图片描述

C/C++规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线

23、

main() {int a, b, d = 25;a = d/10%9;b = a && (-1);printf("%d,%d\n", a, b);
}

程序运行后的输出结果是()
在这里插入图片描述

a=d/10%9,由于/是除法运算符,%(两边必须是整数)是取余运算符。这两个运算符都是同一优先级,都是左结合,那么就表示d除以10所得到的整数再除以9取余数。
假设d=25,那么a=25/10%9=2%9=2
注意 x%y如果x 逻辑与&&运算认为0为假,非0为真

  1. C语言中, 表达式 (4 << 2 | 3) 的结果是()
    在这里插入图片描述

这题考察的是2进制运算和优先级
<<优先级大于|
所以实际运算顺序为 (4<<2) | 3
4 二进制为 100 , 移位<<2 得到 10000 即 16
3 二机制为 011
10000 | 011 或运算得到 10011 即 19

25.执行下面程序时,欲将25和2.5分别赋给a和b,正确的输入方法是()

int a;
float b;
scanf("a=%d,b=%f",&a,&b);

在这里插入图片描述

格式控制字符串中出现的常规字符(包括转义字符),务必原样输入。所以正确答案为C。

26.数组a的定义为:int a[3][4]; 下面哪个不能表示 a[1][1] ?
在这里插入图片描述
27、下面程序运行的结果是()

#include
void add(int *p){(*p)++;printf("%d", *p);if (*p > 5){return;}add(p);
}
int main(){int i = 0;add(&i);return 0;
}

在这里插入图片描述

指针p所指一直没有改变,变得是指针p所指向的值。
p++ :表示先访问p,然后p++;
(p)++: 表示先访问p,然后将*p的值++;p指针不变。

28、下列for循环的循环体执行次数为

for(int i=10, j=1; i=j=0; i++, j--)

在这里插入图片描述

i=j=0; 是一个赋值语句,位于for的判断位置,就只当成条件真假,C中0为假,非0为真,所以i=j=0,结果就是i==0,为假,则循环不进入;如果是 i=j=1,结果就是真,可以进入循环,并且无限。
在for(string1;string2;string3)中,string1用于设定循环变量处置,string2用于循环判断,string3用于改变循环变量到调节,一般情况下,我们采用逻辑判断表达式来决定循环是否执行,而如果在这里采用赋值语句,其逻辑值始终为假,导致循环不执行
在这里插入图片描述

29、阅读以下程序,当输入数据的形式为25,13,10↙,正确的输出结果为()

int main() {int x, y, z;scanf("%d%d%d", &x, &y, &z);printf ("x+y+z=%d\n", x+y+z);
}

在这里插入图片描述

当一次scanf调用需要输入多个数据项时,如果前面数据的输入遇到非法字符,并且输入的非法字符不是格式控制字符串中的常规字符,那么,这种非法输入将影响后面数据的输入,导致数据输入失败。当输入为25,13,10时,a的值是25,y和z的值将无法预测,所以x+y+z的值是无法确定的。故正确答案是D。
在这里插入图片描述

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
A.机器学习入门算法(三):基... 机器学习算法(三):K近邻(k-nearest neigh...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
Redis 所有支持的数据结构... Redis 是一种开源的基于键值对存储的 NoSQL 数据库,支持多种数据结构。以下是...
win下pytorch安装—c... 安装目录一、cuda安装1.1、cuda版本选择1.2、下载安装二、cudnn安装三、pytorch...
MySQL基础-多表查询 文章目录MySQL基础-多表查询一、案例及引入1、基础概念2、笛卡尔积的理解二、多表查询的分类1、等...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
IHome主页 - 让你的浏览... 随着互联网的发展,人们越来越离不开浏览器了。每天上班、学习、娱乐,浏览器...
TCP 协议 一、TCP 协议概念 TCP即传输控制协议(Transmission Control ...
营业执照的经营范围有哪些 营业执照的经营范围有哪些 经营范围是指企业可以从事的生产经营与服务项目,是进行公司注册...
C++ 可变体(variant... 一、可变体(variant) 基础用法 Union的问题: 无法知道当前使用的类型是什...
血压计语音芯片,电子医疗设备声... 语音电子血压计是带有语音提示功能的电子血压计,测量前至测量结果全程语音播报࿰...
MySQL OCP888题解0... 文章目录1、原题1.1、英文原题1.2、答案2、题目解析2.1、题干解析2.2、选项解析3、知识点3...
【2023-Pytorch-检... (肆十二想说的一些话)Yolo这个系列我们已经更新了大概一年的时间,现在基本的流程也走走通了,包含数...
实战项目:保险行业用户分类 这里写目录标题1、项目介绍1.1 行业背景1.2 数据介绍2、代码实现导入数据探索数据处理列标签名异...
记录--我在前端干工地(thr... 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前段时间接触了Th...
43 openEuler搭建A... 文章目录43 openEuler搭建Apache服务器-配置文件说明和管理模块43.1 配置文件说明...