总结c++笔试题目

2023-11-18

若有以下说明和语句,请选出哪个是对c数组元素的正确引用_______。 int c[4][5],(*cp)[5]; cp=c;
A.cp+1
B.*(cp+3)
C.*(cp+1)+3
D.*(*cp+2)

正确答案:D
解析:cp=c 这个语句是将数组第0行的地址赋给了cp。cp+1使指针指向二维数组c的第一行;*(cp+3)是数组c的第三行的第0列的地址值;*(cp+1)+3是数组c的第一行第三列的地址值。
*(*cp+2)等价于*(*(cp+0)+2),等价于c[0][2],代表c数组的一个元素。

9.类A中有唯一的一个成员函数f,且f是公有的静态或非静态成员函数,对于类A的一个对
象a,执行语句 a.f(100);成功,那么f 的函数原型不可以是:B 
(A) A& f( int, int=50 ); (B) void f(int& ) ; 


(C) const A * f(const int ); (D) A f( const int&); 
1.
 关键字static的作用是什么?
在C语言中,关键字static有三个明显的作用:
1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
 
2.
const最经常的用法
 1.为了防止传递的函数参数不被修改,在调用函数的形参中用const关键字.
2.const可以用来创建数组常量、指针常量、指向常量的指针等
const int a;     //前两个的作用是一样,a是一个常整型数。
int const a; 
const int *a;    //第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。
int * const a;
int const * a const; //第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。
//注:const并不会阻止参数的修改

3.
下面的代码输出是什么,为什么?
void foo(void)
{
    unsigned int a = 6;
    int b = -20;
    (a+b > 6) ? puts("> 6") : puts("<= 6");
}
//当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。
因此-20变成了一个非常大的正整数,所以该表达式计算出的结果大于6。
 
4.
#define dPS struct s *
typedef struct s * tPS;
以上两种情况的意图都是要定义dPS 和 tPS 作为一个指向结构s指针。哪种方法更好呢?(如果有的话)为什么?
这是一个非常微妙的问题,任何人答对这个问题(正当的原因)是应当被恭喜的。答案是:typedef更好。思考下面的例子:
dPS p1,p2;
tPS p3,p4;
第一个扩展为
struct s * p1, p2;
.上面的代码定义p1为一个指向结构的指,p2为一个实际的结构,这也许不是你想要的。第二个例子正确地定义了p3 和p4 两个指针。晦涩的语法
 
5.int a = 5, b = 7, c;
c = a+++b;//<==>c = a++ + b;
这段代码持行后a = 6, b = 7, c = 12。
 

6.
写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值(3分)
int a = 4;
(A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++);
a = ?
答:C错误,左侧不是一个有效变量,不能赋值,可改为(++a) += a;
改后答案依次为9,10,10,11

7.头文件中的 ifndef/define/endif 干什么用?预处理
答:防止头文件被重复引用

8. switch()中不允许的数据类型是?
答:实型

9.
编写strcat函数(6分)
已知strcat函数的原型是char *strcat (char *strDest, const char *strSrc);
其中strDest 是目的字符串,strSrc 是源字符串。
(1)不调用C++/C 的字符串库函数,请编写函数 strcat
答:
VC源码:
char * __cdecl strcat (char * dst, const char * src)
{
char * cp = dst;
while( *cp )
cp++; /* find end of dst */
while( *cp++ = *src++ ) ; /* Copy src to end of dst */
return( dst ); /* return dst */
}
(2)strcat能把strSrc 的内容连接到strDest,为什么还要char * 类型的返回值?
答:方便赋值给其他变量

10.

回答下面的问题(6分)
(1).Void GetMemory(char **p, int num){
*p = (char *)malloc(num);
}
void Test(void){
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
请问运行Test 函数会有什么样的结果?
答:输出“hello”
(2). void Test(void){
char *str = (char *) malloc(100);
strcpy(str, “hello”);
free(str);
if(str != NULL){
strcpy(str, “world”);
printf(str);
}
}
请问运行Test 函数会有什么样的结果?
答:输出“world”
(3). char *GetMemory(void){
char p[] = "hello world";
return p;
}
void Test(void){
char *str = NULL;
str = GetMemory();
printf(str);
}
请问运行Test 函数会有什么样的结果?
答:无效的指针,输出不确定
 
11.
程序什么时候应该使用线程,什么时候单线程效率高。
答:1.耗时的操作使用线程,提高应用程序响应
2.并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求。
3.多CPU系统中,使用线程提高CPU利用率
4.改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独
立的运行部分,这样的程序会利于理解和修改。
其他情况都使用单线程。

12
.C++中什么数据分配在栈或堆中,New分配数据是在近堆还是远堆中?
答:栈: 存放局部变量,函数调用参数,函数返回值,函数返回地址。由系统管理
堆: 程序运行时动态申请,new 和 malloc申请的内存就在堆上
13.
int i=10, j=10, k=3; 
k*=i+j; k最后的值是?
答:60,此题考察优先级,实际写成: k*=(i+j);,赋值运算符优先级最低

14.
ICMP是什么协议,处于哪一层?
答:Internet控制报文协议,处于网络层(IP层)
15.
全局变量和局部变量在内存中是否有区别?如果有,是什么区别?
      全局变量储存在静态数据库,局部变量在堆栈。
17.
-1,2,7,28,,126请问28和126中间那个数是什么?为什么?
第一题的答案应该是4^3-1=63
规律是n^3-1(当n为偶数0,2,4)
      n^3+1(当n为奇数1,3,5)
 
18.
Heap与stack的差别。
Heap是堆,stack是栈。
Stack的空间由操作系统自动分配/释放,Heap上的空间手动分配/释放。
Stack空间有限,Heap是很大的自由存储区
C中的malloc函数分配的内存空间即在堆上,C++中对应的是new操作符。
程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也在栈上进行

19.
用宏定义写出swap(x,y)     //如果把较长的宏定义分成干行,须在待续的行末尾加上\
#define swap(x,y) \
x=x+y;\
y=x-y;\
x=x-y 
注意:结尾没有;
20
一个指针为4个字节
 int *p;
 printf("%d",sizeof(p));//输出: 4

void Func(char str[100])
{
printf("%d\n", sizeof(str));
}
答:
4
分析:
指针长度
一个32位的机器,该机器的指针是多少位
指针是多少位只要看地址总线的位数就行了。80386以后的机子都是32的数据总线。所以指针的位数就是4个字节了。
21.
main()
{
  int a[5]={1,2,3,4,5};
   int *ptr=(int *)(&a+1);    //ptr实际是&(a[5]),也就是a+5
   printf("%d,%d",*(a+1),*(ptr-1));
}
输出:2,5
*(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2,5
&a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int)
int *ptr=(int *)(&a+1);  则ptr实际是&(a[5]),也就是a+5
原因如下:
&a是数组指针,其类型为 int (*)[5];
而指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同 .a是长度为5的int数组指针,所以要加 5*sizeof(int)
所以ptr实际是a[5]  .但是ptr与(&a+1)类型是不一样的(这点很重要)
所以prt-1只会减去sizeof(int*)
a,&a的地址是一样的,但意思不一样,a是数组首地址,也就是a[0]的地址,&a是对象(数组)首地址,a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[5].

22.
1)给定结构struct A 
{
       char t:4;
       char k:4;
       unsigned short i:8;
       unsigned long m;
};问sizeof(A) = ?
给定结构struct A 

{
       char t:4; 4位
       char k:4; 4位
       unsigned short i:8; 8位      
       unsigned long m; // 偏移2字节保证4字节对齐
}; // 共8字节

23.
//输出结果: 15
#include<stdio.h>
int main(void)
{
 char aa[10];
    printf("%d",strlen(aa));
 return 0;
}
 
24.
C和C++有什么不同?
从机制上:c是面向过程的(但c也可以编写面向对象的程序);c++是面向对象的,提供了类。但是,
c++编写面向对象的程序比c容易
从适用的方向:c适合要求代码体积小的,效率高的场合,如嵌入式;c++适合更上层的,复杂的; llinux核心大部分是c写的,因为它是系统软件,效率要求极高。
从名称上也可以看出,c++比c多了+,说明c++是c的超集;那为什么不叫c+而叫c++呢,是因为c++比
c来说扩充的东西太多了,所以就在c后面放上两个+;于是就成了c++
C语言是结构化编程语言,C++是面向对象编程语言。
C++侧重于对象而不是过程,侧重于类的设计而不是逻辑的设计。

25 &和&&的区别。
&是位运算符。&&是布尔逻辑运算符。
26,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) .short s1 = 1; s1 += 1正确。

27.
17.在不用第三方参数的情况下,交换两个参数的值
#include <stdio.h>
void main()
{
    int i=60;
    int j=50;
    i=i+j;
    j=i-j;
    i=i-j;
    printf("i=%d\n",i);
    printf("j=%d\n",j);
}
方法二:
i^=j;
j^=i;
i^=j;
方法三:
// 用加减实现,而且不会溢出
a = a+b-(b=a)
28.
假设你有8个球,其中一个略微重一些,但是找出这个球的惟一方法是将两个球放在天平上对比。最少要称多少次才能找出这个较重的球?

答:
2次就可以了,方法:将其分成3堆,分别是3个、3个、2个。
第一次天平两边各放3个,会有两种情况,一、两边持平一样重,那较重的球则不在里面,那就把剩下的两个称一下就能找到较重那个了。第二种情况是有一边较重,那较重的球就在较重那边的3个之中,第二次称就是就在这3个之中拿出两个来比较,也有两种情况,持平则较重的是没放进去称的那个,有一边较重则那个就是较重的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

总结c++笔试题目 的相关文章

  • c++中string类与字符串数组

    strlen及用 给c 字符串数组赋值 strlen 很笨 它会在遇到 0之前一直找下去 所以在cstr2中没有 0的时候 它会一直找下去 而那些地方还没有被初始化过 所以就是乱的 而且strlen计算出的字符串数组长度是不包含 0的那部分
  • C++中STL库

    六个部分组成 容器 用来存放数据的各种数据结构 比如vector deque list set和map等 是一种类模板 算法 各种常用的算法 比如排序算法 拷贝算法 查找算法等 是一种函数模板 迭代器 容器与算法间的粘合剂 共有五种类型 重
  • c++11:动态内存与智能指针

    为了更容易 同时也更安全 地使用动态内存 新的标准库提供了两种智能指针 smart pointer 类型来管理动态对象 智能指针的行为类似常规指针 重要的区别是它负责自动释放所指向的对象 新标准库提供的这两种智能指针的区别在于管理底层指针的
  • C++运算符的优先级

    有括号的优先级最高 涉及对象的运算符 自增自减 取值 取地址运算符 逻辑非 按位取反 强制类型转换 长度运算符 先乘除后加减 左移右移运算符 比较运算符 三目运算符 各类赋值运算符 逗号运算符优先级最低 注意 同一优先级的运算符 运算次序由
  • 苏移笔试

    1 Linux查看一个目录下文件占用多少空间 du sh path 我们有个系统每天要下载数据 为了检查下载数据是否正常 需要查看下载数据目录大小 因为每天的数据都差不多 如果变化太大就说明不正常 查看目录大小的命令是du 当然也可以查看文
  • cpp基础:对象和类

    1 类名首字母大写 Wakawaka 2 类接口 编写类的人提供的一个操作类成员的方法 3 通过关键字实现类成员的访问控制 4 封装 将实现细节和抽象分开被称为封装 如 h和 cpp文件分开 接口是实现封装的重要一环 5 默认访问权限pri
  • C++ 继承详解

    C 继承 继承语法 继承方式 private继承特点 改变访问权限 名字遮蔽 继承时的对象模型 无变量遮蔽 有变量遮蔽 final关键字 继承语法 继承的一般语法为 class 派生类名 继承方式 基类名 派生类新增加的成员 继承方式 继承
  • C++:std::thread

    1 std thread的用法 头文件为 include
  • 笔试题目1

    腾讯笔试 2 假设函数f1的时间复杂度O n 那么f1 f1的时间复杂度为 A O n B O n n C O n log n D 以上都不对 这个题目我的思路是A 讨论后答案应该是D 因为f1的返回值不确定 如果是个数组当然复杂度就不同了
  • C++学习笔记-宏(define),类型定义符(typedef),Using,内联函数(inline),指针常量和常量指针的区别与联系

    宏 define 类型定义符 typedef 内联函数 inline 的区别与联系 宏 define define 程序编译的四个阶段 条件编译 tydedef typedef和 define之间的区别 指针常量和常量指针 using 内联
  • windows下dll文件的创建详细教程

    1 前言 dll文件是啥 就不作过多赘述了 现在直接教大家如何创建与使用dll文件 本文基于windows系统 使用的编译相关工具为visual studio 2019 2 创建dll 2 1 创建dll工程 首先打开visual stud
  • 【转】C++中的返回值优化

    C 中的返回值优化 在这边文章里用到了以下编译器和操作系统 大家请自行安装 uname ar Linux debian 4 9 0 3 amd64 1 SMP Debian 4 9 30 2 deb9u3 2017 08 06 x86 64
  • C++编译时多态和运行时多态

    编译时多态 运行时多态 两种多态的优缺点 多态就是指一个基类指针根据所指对象的不同而有不同的功能和行为 编译时多态 编译时多态 又叫静态多态 早绑定 编译时多态基于template 模板 的具现化与函数的重载解析 这种多态在编译期进行 因此
  • C# 基础知识 (四).C#简介及托管代码

    暑假转瞬即逝 从10天的支教生活到1周的江浙沪旅游 在这个漫长的暑假中我经历了很多东西 也学到了很多东西 也认识到了很多不足之处 闲暇之余我准备重新进一步巩固C 相关知识 包括C 入门知识 C 并行开发 ASP网站等 这篇文章我介绍的是书籍
  • C++ qsort 排序函数

    是C中的函数 需要添加 include
  • C#基于LINQ对数据库的增删查改

    1 增加功能 主窗口 using System using System Collections Generic using System ComponentModel using System Data using System Draw
  • 修饰符-访问修饰符internal sealed

    摘自 internal C 参考 摘自 sealed C 参考 Internal 访问仅限于当前程序集 protected internal 访问限制到当前程序集或从包含派生的类型的类别 程序集就是代码编译后bin目录下生产的 exe或者
  • C++ 生命周期

    C 程序的生命周期要经过编码 Coding 预处理 Pre processing 编译 Compiling 和运行 Running 四个阶段 编码即coding阶段 这阶段主要是定义变量 写语句 实现各种数据结构 函数和类 预处理是 C C
  • 总结c++笔试题目

    若有以下说明和语句 请选出哪个是对c数组元素的正确引用 int c 4 5 cp 5 cp c A cp 1 B cp 3 C cp 1 3 D cp 2 正确答案 D 解析 cp c 这个语句是将数组第0行的地址赋给了cp cp 1使指针
  • linux内核驱动开发笔试题

    linux内核驱动开发笔试题 一 一些常规中举的C考题 第一题 写出下述程序结果 int m 3 1 4 7 2 5 8 3 6 9 int i j k 2 for i 0 i lt 3 i printf d m k i 问题所在 本题考点

随机推荐

  • 有些so文件没有导入到lib目录问题解决

    在使用第三方sdk或者第三方库时 经常在libs目录下 会有一些so文件 比如高德地图的3Ddemo 就包含两个含有so文件的目录 而有的第三方不止两个目录的so文件 正常是这样子的 有多个文件目录的 但是 如果有的sdk只有两个关于so文
  • 给定一个数字范围,求一个数出现的次数

    题目 输入 29 33 3 输出 5 3出现5次 import sys def find lis start lis 0 end lis 1 m lis 2 n 0 for i in range start end 1 j i while
  • 前端单元测试03之Sion

    前端单元测试03之Sion 前端测试存在的问题 在讲Sinon之前 我们得先讲一下在学习了Mocha chai以及enzyme之后 我们的前端测试还存在的一些问题 比如前台测试需要与后台交互 获取后台数据后再根据相应数据进行测试 又比如一个
  • 关于微信小程序使用JavaScript实现检索算法

    检索算法 拟解决生活中最常见的问题之一 检索问题 查找问题 wxml wxss js 拟解决生活中最常见的问题之一 检索问题 查找问题 该问题要求在一个列表中查找某个具体元素是否出现 若出现 返回具体元素在数组中的位置 否则返回 1 根据列
  • 论文翻译(11) — livox_camera_calib标定论文

    目录 1 引言 2 原理 A 概述 B 边缘提取和匹配 C 外部标定 D 对标定结果上边缘分布的分析 E 初始化和粗略标定 论文链接 https arxiv org pdf 2103 01627v2 pdf 源码链接 https githu
  • 如何判断Linux服务器是否被入侵?

    1 如何判断自己的服务器是否被入侵 背景 随着开源产品的越来越盛行 作为一个Linux运维工程师 能够清晰地鉴别异常机器是否已经被入侵了显得至关重要 个人结合自己的工作经历 整理了几种常见的机器被黑情况仅供参考 以下情况是在CentOS 6
  • 光模块SFP+与SFP、XFP、QSFP、QSFP+的区别

    光收发模块 一 光收发一体模块定义 光收发一体模块由光电子器件 功能电路和光接口等组成 光电子器件包括发射和接收两部分 发射部分是 输入一定码率的电信号经内部的驱动芯片处理后驱动半导体激光器 LD 或发光二极管 LED 发射出相应速率的调制
  • K8S 使用 SideCar 模式部署 Filebeat 收集容器日志

    对于 K8S 内的容器日志收集 一般有两种常用的方式 1 使用 DaemonSet 在每台 Node 上部署一个日志收集容器 用于收集当前 Node 上所有容器挂载到宿主机目录下的日志 2 使用 SideCar 模式将日志收集容器与业务容器
  • python基础运用

    列表有索引 下标 字符串有 格式化字符串 str1 xxx 0 sss 1 format 哈哈 100 print str1 print xxx sss d 哈哈 100 name 张三 age 18 hobby 唱 跳 rap 篮球 张三
  • 计算机世界规整_20211110_周三

    计算机世界规整 20211110 周三 扫我查看
  • Android 4.4.2引入的超炫动画库

    酷炫 作者博客 http rkhcy github io 源码地址 https github com Rkhcy TransitionNote Google Demo https github com android platform fr
  • 在vue3中使用百度地图

    1 在vue项目public文件夹下的index html中引入script 在需要使用百度地图的地方直接使用 代码如下
  • 移动开发之我见--“Android开发生涯”

    纵观这几年的发展 移动手机的发展真是翻天覆地 前两年诺基亚一统天下 苹果颠覆了整个手机市场 安卓也分得了一杯羹 WindowPhone手机也纯纯欲动 Bada也抓紧推出自己的系统 360也要推出自己的手机系统 百度 腾讯纷拥而至 未来世界是
  • numpy 更新版本后 more than 1 DLL from .libs警告

    问题 解析 由于卸载或者更新旧版本时 未能删掉对应的 dll文件导致 解决 根据警告路径 找到对应的dll文件 根据时间 删掉之前的版本 保留近期版本 直接删除并不会影响新版本
  • VsCode的 code . 失效了?如何解决

    已经安装了vscode 为什么没有 code 命令呢 是因为你下载vscode的时候 是直接拷贝的文件 或者下载失误的问题 从而导致code环境变量没有配置 配置环境变量 path 找到我的电脑 右键 属性 2 选择高级系统设置 单机即可
  • 栅压自举采样电路(bootstrap技术)

    栅压自举采样电路 bootstrap技术 参考 CMOS模 数转换器设计与仿真 编著 张锋 陈铖颖 范军 文章目录 栅压自举采样电路 bootstrap技术 一 电路结构 二 工作原理 一 电路结构 二 工作原理
  • 【C++初阶】右值引用

    一 什么是左值右值 一般来说能取地址的 也就是等号左边的值 比如创建的int变量是左值 而右值就是与他相反 在等号右边 并且不能被取地址 比如说数字10 一般的普通引用只能引用左值 引用和const组合在一起使用的话既可以引用左值也可以引用
  • Python求三位水仙花数

    Python求三位水仙花数 简介 水仙花数 是指一个三位整数 其各位数字的3次方和等于该数本身 例如 ABC是一个 3位水仙花数 则 A的3次方 B的3次方 C的3次方 ABC 基础掌握 Python str 函数 https www ru
  • C++/C++11中头文件iterator的使用

  • 总结c++笔试题目

    若有以下说明和语句 请选出哪个是对c数组元素的正确引用 int c 4 5 cp 5 cp c A cp 1 B cp 3 C cp 1 3 D cp 2 正确答案 D 解析 cp c 这个语句是将数组第0行的地址赋给了cp cp 1使指针