C/C++笔试经典程序(二)
1.下面5个函数哪个能够成功进行两个数的交换?
swap1传的是值的副本,在函数体内被修改了形参p、q(实际参数a、b的一个拷贝),p、q的值确实交换了,但是它们是局部变量,不会影响到主函数中的a和b。当函数swap1生命周期结束时,p、q所在栈也就被删除了。
swap2和swap3传的是一个地址进去,在函数体内的形参*p、*q是指向实际参数a、b地址的两个指针。
swap5函数与swap4类似,是一个引用传递,修改的结果直接影响实参。
2.写出函数指针、函数返回指针、const指针、指向const的指针、指向const的const
指针。
3.找出下面程序的错误,并解释它为什么是错的。
程序体存在着函数指针的错误使用问题。正确程序如下:
4.描述下列指针
(1)float(**def)[10];
def是一个二级指针,它指向的是一个一维数组的指针,数组的元素都是float。
(2)double*(*gh)[10];
gh是一个指针,它指向一个一维数组,数组元素都是double*。
(3)double(*f[10])();
f是一个数组,f有10个元素,元素都是函数的指针,指向的函数类型是没有参数且返回
double的函数。
(4)int*((*b)[10]);
就跟“int* (*b)[10]”是一样的,是一维数组的指针。
(5)Long (* fun)(int)
函数指针。
(6)Int (*(*F)(int,int))(int)
F是一个函数的指针,指向的函数的类型是有两个int参数并且返回一个函数指针的函
数,返回的函数指针指向有一个int参数且返回int的函数。
5.以下程序的输出是
本题定义一个指针指向一个10个int元素的数组。a+1表明a指针向后移动1*sizeof(数组大小);a+1后共向后移动40个字节。*a+1仅针对这一行向后移动4个字节,如下图所示。*(*(a+1)+2)表示a[1][2]。
输出如下:1 11 2 2 11。
6.写出如下程序片段的输出。
第一个结果好理解,是正常的指针运算。2
第二个的确是5。首先a表示一个1行5列数组,在内存中表示为一个5个元素的序列。int
*ptr=(int*)(&a+1)的意思是,指向a数组的第6个元素(尽管这个元素不存在)。那么显然,
(ptr-1)所指向的数据就是a数组的第5个元素——5。
时刻牢记这样的观点:数组名本身就是指针,再加个&,就变成了双指针,这里的双指
针就是指二维数组,加1,就是数组整体加一行,ptr指向a的第6个元素。
7.C++中有了malloc/free,为什么还需要new/delete?
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可
用于申请动态内存和释放内存。
对于非内部数据类型的对象而言,只用malloc/free无法满足动态对象的要求。对象在创
建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库
函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强
加于malloc/free。
因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完
成清理与释放内存工作的运算符delete。new/delete不是库函数,而是运算符。
8.this指针
(1)This指针本质是一个函数参数,只是编译器隐藏起形式的,语法层面上的参数。
this只能在成员函数中使用,全局函数、静态函数都不能使用this。
(2)this在成员函数的开始前构造,在成员的结束后清除。这个生命周期同任何一个函
数的参数是一样的,没有任何区别。当调用一个类的成员函数时,编译器将类的指针作为函
数的this参数传递进去。
(3)this指针并不占用对象的空间。this相当于非静态成员函数的一个隐函的参数,不占对象的空间。它跟对象之间没有包
含关系,只是当前调用函数的对象被它指向而已。this指针会因编译器不同而有不同的放置位置。可能是堆、栈,也可能是寄存器。
9.以下代码的输出结果是什么
输出结果为:10,10,9,0。y=i++在循环体内,第二次循环时才执行。
10. 编程实现单链表删除节点。
11. 单链表插入节点。
C/C++笔试经典程序(二)的更多相关文章
- C/c++笔试经典程序(一)
1.输出结果比较 1) 输出结果:21 2) 输出结果:12.虽然循环只进行了一次,但是对!X++来说,X还是进行了自加运算. 2.指针运算 输出结果8,8.程序运行时,printf语句是从右往左进行 ...
- iOS开发——面试笔试精华(二)
面试笔试精华(二) 警告:一定要把英文题目过一遍,有些公司的题目故意弄成英文的!!! 1. Difference between shallow copy and deep copy? ...
- 快要C语言考试了,大学生们收好这些经典程序案例,包你考试过关!
距离考试越来越近 编程大佬早已饥渴难耐 电脑小白还在瑟瑟发抖 但是不要怕! 来看看这些经典程序案例 包你考试过关! [程序1] 有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多 ...
- 微信小程序二维码推广统计
微信小程序可以通过生成带参数的二维码,那么这个参数是可以通过APP的页面进行监控的 这样就可以统计每个二维码的推广效果. 今天由好推二维码推出的小程序统计工具HotApp小程序统计也推出了带参数二维码 ...
- 山东理工大学ACM平台题答案关于C语言 1137 C/C++经典程序训练7---求某个范围内的所有素数
C/C++经典程序训练7---求某个范围内的所有素数 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 求小于n的所有素数,按照每行 ...
- C语言必背18个经典程序
C语言必背18个经典程序 1./*输出9*9口诀.共9行9列,i控制行,j控制列.*/ #include "stdio.h" main() {int i,j,result; for ...
- 剑指Offer——网易笔试之不要二——欧式距离的典型应用
剑指Offer--网易笔试之不要二--欧式距离的典型应用 前言 欧几里得度量(euclidean metric)(也称欧氏距离)是一个通常采用的距离定义,指在m维空间中两个点之间的真实距离,或者向量的 ...
- node 无脑生成小程序二维码图
RT 新建createwxaqrcode.js: const request = require('request') const fs = require('fs') // eg:生成购物车列表圆形 ...
- 微信小程序-二维码汇总
小程序二维码在生活中的应用场景很多,比如营销类一物一码,扫码开门,扫码付款等...小程序二维码分两种? 1.普通链接二维码 即跟普通的网站链接生成的二维码是一个意思,这种二维码的局限性如下: 对于普通 ...
随机推荐
- UIview定义背景图片
UIImage *image = [UIImage imageNamed:@"bgimagename"]; UIView *view = [[UIView alloc]ini ...
- 从1970年1月1日00:00:00 GMT以来此时间对象表示的毫秒数转化为Datetime
1970年1月1日(00:00:00 GMT)Unix 时间戳(Unix Timestamp)对时间转换 将Long类型转换为DateTime类型 /// <summary> /// 将L ...
- JavaScript-CheckBox全选/反选
//------------------------------------ // 全/反选 // param checkName checkbox的name属性 //---------------- ...
- GR&R
ANOVA gauge R&R (or ANOVA gauge repeatability and reproducibility) is a measurement systems anal ...
- Platform Invoke
PInvoke 允许managed code 来调用在DLL中实施的unmanged function. Platform invoke relies on metadata to locate ex ...
- GL_GL系列 - 多币种管理分析(案例)
2014-07-08 Created By BaoXinjian
- 【Java】图片高质量缩放类
package com.test; import com.sun.image.codec.jpeg.JPEGImageEncoder; import com.sun.image.codec.jpeg. ...
- StateMachine
Create State Machine Create either a passive or an active state machine: ? 1 var fsm = new PassiveSt ...
- android studio 安装报错 unable to run mksdcard sdk tool
搜了一下原来缺少这个 sudo apt-get install lib32z1 lib32ncurses5 lib32stdc++6
- Jmeter监控系统等资源,ServerAgent端口的修改
默认情况下在下载的ServerAgent下,如果服务是windows系统,则直接启动"startAgent.bat"即可,如果是Linux系统,则直接启动"./start ...