http://www.mianwww.com/html/2013/10/19128.html

http://blog.csdn.net/wdzxl198/article/details/9050751

http://www.cnblogs.com/fangyukuan/archive/2010/09/18/1829871.html

http://blog.csdn.net/blue4689/article/details/6599592

1)将“引用”作为函数参数有哪些特点?

1.传递引用给函数与传递指针的效果是一样的,使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元

2.使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数。因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效率和所占空间都好。

2)结构与联合的区别

1. 结构和联合都是由多个不同的数据类型成员组成, 但在任何同一时刻, 联合中只存放了一个被选中的成员(所有成员共用一块地址空间), 而结构的所有成员都存在(不同成员的存放地址不同)。 
2. 对于联合的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构的不同成员赋值是互不影响的。

Union的大小为其内部所有变量中的最大值,并且按照类型最大值的整数倍进行内存对齐

union A
{
char c[];
char cc1;
};
union B
{
char c[];
int i;
};
union C
{
char c[];
double d;
};
union D
{
char c;
int i;
double d;
}; void main()
{ cout << sizeof(A) << " " << sizeof(B) << " " << sizeof(C) << " " << sizeof(D) << endl;
system("pause");
}
//输出:10 12 16 8

3)关于联合的一道输出题

union
{
int i;
char x[];
}a; void main()
{
a.x[] = ;
a.x[] = ;
printf("%d", a.i);
}

输出266,低位低地址,高位高地址,内存占用情况是Ox0000 010A

4)实现string类

class String
{
public:
  String(const char *str = NULL); // 通用构造函数
  String(const String &another); // 拷贝构造函数
  ~String(); // 析构函数
  String& operater =(const String &rhs); // 赋值函数
private:
  char* m_data; // 用于保存字符串
}; String::String(constchar*str)
{
if ( str == NULL ) // strlen在参数为NULL时会抛异常才会有这步判断
{
m_data =newchar[] ;
m_data[] ='\0' ;
}
else
{
m_data =newchar[strlen(str) +];
strcpy(m_data,str);
}
}
String::String(const String &another)
{
m_data =newchar[strlen(another.m_data) +];
strcpy(m_data,other.m_data);
} String& String::operator=(const String &rhs)
{
if ( this==&rhs)
return*this ;
delete []m_data; //删除原来的数据,新开一块内存
m_data =newchar[strlen(rhs.m_data) +];
strcpy(m_data,rhs.m_data);
return*this ;
} String::~String()
{
delete []m_data ;
}

5)const#define 相比,有何优点

const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误

6)如何判断一段程序是由编译程序还是由C++编译程序编译的?

__cplusplus宏由编译器定义

#ifdef __cplusplus
  cout<<"c++";
#else
  cout<<"c";
#endif

最新文章

  1. HTML 5 画布(canvas)
  2. linux下的C语言开发
  3. TestNG官方文档中文版(4)-运行TestNG
  4. Linux摄像头驱动学习之:(三)从零写虚拟驱动(仿照vivi.c)
  5. js的执行顺序
  6. NLP基本任务-nltk_data文本分割
  7. 【.Net免费公开课】--授技.Net中的高帅富技术-&quot;工作流&quot;
  8. [Effective C++ --013]以对象管理资源
  9. C/C++中unsigned char和char的区别
  10. AUL使用初记
  11. JAVA处理XML
  12. iOS开发之数据存储之Preference(偏好设置)
  13. const关键字到底该怎么用
  14. Django小技巧——使用package管理app
  15. 比较 Spring AOP 与 AspectJ
  16. java代码操作solr搜索引擎的增删查改
  17. Docker 安装 oracle 并使用 navicat 实现外部连接
  18. weblogic查看版本号教程
  19. DES加密Java实现
  20. android TextView 设置部分文字背景色和文字颜色

热门文章

  1. Caused by: java.lang.IllegalArgumentException: Parameter Maps collection does not contain value for com.bj186.crm.mapper.UserMapper.Integer
  2. OpenCV2:第五章 访问图像
  3. Mac下Apache服务器的初步搭建
  4. N皇后递归
  5. 4 SQL 数据更新
  6. Linux基础学习-命令行与图形界面切换
  7. CentOS 7的docker安装初始化
  8. webpack 之 缓存处理
  9. uC/OSii之任务划分
  10. SqlParameter[] parameters