当前位置: 首页 > news >正文

ForSecondWork-No.4:C/C++笔试题回忆并整理

1、写出下列代码的运行结果。

void GetMemory(char *p,int num)

{

    p=(char *) malloc(sizeof(char)*num);

}

int main(int argc , char * argv[])

{

   char *str=NULL;

   GetMemory(str,100);

   strcpy(str,"Hello World");

   cout<<str<<endl;

}

       答:这是C++内存管理方面的问题。

       程序运行崩溃并泄露了一块内存。关键是调用GetMemory不能使str指向存储100个字符的内存空空间。详解请参考C++内存管理相关知识。编译器总是要为函数的每个参数制作临时副本,指针参数 p 的副本是 _p,
编译器使 _p = p。如果函数体内的程序修改了_p 的内容,就导致参数 p 的内容作相应的修改。这就是指针
可以用作输出参数的原因。在本例中,_p 申请了新的内存,只是把_p 所指的内存地址改变了,但是 p 丝毫
未变。所以函数 GetMemory 并不能输出任何东西。事实上,每执行一次 GetMemory 就会泄露一块内存,因为没有用 free 释放内存。如果非得要用指针参数去申请内存,那么应该改用“指向指针的指针”。


2、 实现如下函数


        这个题目还是很具有代表行的,我全错,除了析构函数。

</pre><pre class="java" name="code" snippet_file_name="blog_20140224_2_707452" code_snippet_id="202894"><span style="font-size:14px;">#include <iostream>
#include <string>
#include <vector>
using namespace std;

class CString
{
public:
	CString(const char* str = NULL);
	CString(const CString &other);
	~CString();
	CString & operator = (const CString &other);
	

public:
	char *m_data;
};

CString::~CString()
{
	delete []m_data;
}
CString::CString(const char*str)
{
	if (str == NULL)
	{
		m_data = new char[1];
		*m_data = '\0';
	}
	else
	{
		int length = strlen(str);
		m_data = new char[length + 1];
		strcpy(m_data, str);
	}
}

CString::CString(const CString &other)
{
	cout<<"Copy Constructor is defined by user!"<<endl;
	int length = strlen(other.m_data);
	m_data = new char[length + 1];
	strcpy(m_data, other.m_data);
}

CString &CString::operator =(const CString &other)
{
	if (this == &other)//s1 = s1, then this will EQUAL to address of other
	{
		return *this;
	}
	//free all memory, then distribute new memory
	delete []m_data;
	int length = strlen(other.m_data);
	m_data = new char[length + 1];
	strcpy(m_data, other.m_data);
	return *this;
}

int main()
{
	CString str("hello");
	CString s1("hello");
	CString s2;
	s1 = s1;
	s2 = str;

	cout<<str.m_data<<" "<<s2.m_data<<endl;

	vector<char> myVec;
	char ch;
	while( (ch = getchar()) != EOF)
	{
		myVec.push_back(ch);
	}

	vector<char>::iterator itr = myVec.begin();
	while (itr != myVec.end())
	{
		cout << *itr++ << endl;
	}

	return 0;
}</span>

3、编程题:两个增序的int数组a,b合并为仍然增序的int数组c。

     答:void MergeShuzu( int a[] , int m , int b[] , int n , int c[] )。

     没有新意。

4、编程题:求n!后末尾零的个数。

      答:int CountZeros( int n )。

      两点:求n!和求末尾零的个数,都不难。

5、写出下列程序运行的结果。

a.指针使用      普通的很,略。

b.可能涉及高低位       

答:代码如下,我还没弄懂他想考我什么,总觉得不可能这么简单。代码可能有些不同,不能全记起,因为不知道出这题的用意,所以记忆更不全了。

int i=0;

while(i<128)

{

    i++;

}

printf("%d %d",c,i);

for(;i<255;i++,c=i);

printf("%d %d",c,i);

     c.动态联编

        参见博文:动态联编也就是此博文中的晚绑定。


另附上以前遇到的两个面试题

面试题-1:虚函数表

参见博文:http://blog.csdn.net/jandunlab/article/details/16920925

面试题-2:C++多态有哪些



相关文章:

  • 总结:指针、引用、const
  • C++中指针和引用的区别
  • sizeof总结
  • 简单算法--一个整形数逆序输出后正序输出/一段精彩的递归代码
  • C++ 虚函数若干问题
  • 微软亚太研发集团2013招聘
  • QT 获取系统屏幕分辨率
  • QSS 用法介绍
  • 简单算法--求一个数n的二进制形式的第i位
  • #pragam once 和 #ifndef 预编译头
  • 在线编程学习【优质的资源】
  • QSizeploicy、 QLayout-setSizeConstrain
  • C语言程序员必读的5本书
  • 一个值得Geek收藏的网站
  • 如何在QML中调用C++的方法并接收C++的信号
  • crontab执行失败的多种原因
  • Java方法详解
  • ng6--错误信息小结(持续更新)
  • opencv python Meanshift 和 Camshift
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • RxJS: 简单入门
  • SpriteKit 技巧之添加背景图片
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 跨域
  • 学习笔记TF060:图像语音结合,看图说话
  • 译自由幺半群
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • #pragma once
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (Python第六天)文件处理
  • (规划)24届春招和25届暑假实习路线准备规划
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (转载)hibernate缓存
  • **PHP分步表单提交思路(分页表单提交)
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .describe() python_Python-Win32com-Excel
  • .NET 8.0 中有哪些新的变化?
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .Net 中Partitioner static与dynamic的性能对比
  • .Net6 Api Swagger配置
  • .NET程序员迈向卓越的必由之路
  • .net开发引用程序集提示没有强名称的解决办法
  • /etc/motd and /etc/issue
  • ::什么意思
  • @ModelAttribute使用详解
  • [ 蓝桥杯Web真题 ]-布局切换
  • [2021 蓝帽杯] One Pointer PHP
  • [AIGC] MySQL存储引擎详解
  • [AX]AX2012 SSRS报表Drill through action
  • [dfs搜索寻找矩阵中最长递减序列]魔法森林的秘密路径
  • [Head First设计模式]策略模式
  • [Kubernetes]9. K8s ingress讲解借助ingress配置http,https访问k8s集群应用