`
xiaoer_1982
  • 浏览: 1816430 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

几个常见的C++问题

阅读更多

几个C++的问题

  刚刚整理了一下网络和文档中对几个C++问题的说明。

1.extern "C"的作用

 因为 C 语言和 C++ 语言的编译规则不一样,所以要告诉系统哪些函数是用 C 方式编译,哪些函数需要用 C++ 方式编译。
如果你不加 extern "C" ,在编译时,系统会提示找不到此函数。

extern "C"表示编译生成的内部符号名使用C约定
例如:
int Fun(int i,int j)
C:_Fun
C++:_Fun_int_int
具体生成什么可能与编译器有关
由于C++支持重载,而重载是在编译期确定的,所以C++必须在内部符号名上区分各重载函数,所以就将参数类型加在函数名后。

2. C++引用与指针的比较


  下面程序中,n是m的一个引用(reference),m是被引用物(referent)。
int m;
int &n = m;
n相当于m的别名(绰号),对n的任何操作就是对m的操作。
所以n既不是m的拷贝,也不是指向m的指针,其实n就是m它自己。

引用的规则:
(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。
(2)不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL)。
(3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。

以下示例程序中,k被初始化为i的引用。
语句k = j并不能将k修改成为j的引用,只是把k的值改变成为6。
由于k是i的引用,所以i的值也变成了6。
int i = 5;
int j = 6;
int &k = i;
k = j; // k和i的值都变成了6;

3. struct和class的区别

1)C++中的struct只是为了和C兼容而做的一个默认为public的class。
2)struct默认访问权限为pulbic; class默认访问权限为private
3)在继承下 struct默认pulbic继承; class默认访问private继承;
C++中 ,结构和类只是其默认权限不同,除此之外没有差别。

4.堆和栈的区别

一个由c/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放
4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。
二、例子程序
这是一个前辈写的,非常详细
//main.cpp
int a = 0; 全局初始化区
char *p1; 全局未初始化区
main()
{
int b; 栈
char s[] = "abc"; 栈
char *p2; 栈
char *p3 = "123456"; 123456\0在常量区,p3在栈上。
static int c =0; 全局(静态)初始化区
p1 = (char *)malloc(10);
p2 = (char *)malloc(20);
分配得来得10和20字节的区域就在堆区。
strcpy(p1, "123456"); 123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。

5.Debug 和 Release 编译方式的本质区别

Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。

Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。

6.sizeof用法总结

A. 参数为数据类型或者为一般变量。例如sizeof(int),sizeof(long)等等。这种情况要注意的是不同系统系统或者不同编译器得到的结果可能是不同的。例如int类型在16位系统中占2个字节,在32位系统中占4个字节。

B. 参数为数组或指针。下面举例说明.
int a[50]; //sizeof(a)=4*50=200; 求数组所占的空间大小
int *a=new int[50];// sizeof(a)=4; a为一个指针,sizeof(a)是求指针
//的大小,在32位系统中,当然是占4个字节。

C. 参数为结构或类。Sizeof应用在类和结构的处理情况是相同的。但有两点需要注意,第一、结构或者类中的静态成员不对结构或者类的大小产生影响,因为静态变量的存储位置与结构或者类的实例地址无关。 第二、没有成员变量的结构或类的大小为1,因为必须保证结构或类的每一 个实例在内存中都有唯一的地址。
下面举例说明,

Class Test{int a;static double c};//sizeof(Test)=4.
Test *s;//sizeof(s)=4,s为一个指针。
Class test1{ };//sizeof(test1)=1;

D. 参数为其他。下面举例说明。
int func(char s[5]);
{
//数的参数在传递的时候系统处理为一个指针,所
//以sizeof(s)实际上为求指针的大小。
}

sizeof(func(“1234”))=4//因为func的返回类型为int,所以相当于
//求sizeof(int).



分享到:
评论

相关推荐

    C++指针编程中的几个常见问题

    本文从C++指针的概念入手,结合相关实例,对C++指针编程中的常见问题进行了总结。分析了其产生的原因,并指出如何避免此类错误。

    Parasoft C++test资料库大全-含多种测试环境的几十个常见问题及解决方法

    Parasoft C++test资料库大全,Parasoft C++test工具使用的百宝箱,包含多种测试环境的几十个常见问题及解决方法。

    几个常见软件测试面试

    几个常见软件测试面试几个常见软件测试面试几个常见软件测试面试几个常见软件测试面试

    几个c++常用的数学类

    几个数学中的常见类,包括复数、矩阵、积分、插值、解线性方程组等。

    C++笔试宝典(笔试中常见的问题)

    IT职场中外企面试最爱提的问题TOP10 MFC中消息循环处理的几个函数之间的区别 等

    hash-encrypt:将几个常见的几个c++ hash加密算法改写成javascript

    关于hash-encrypt 本项目只是把几个常见的c++ hash算法转成js。这几个hash算法是: RSHash JSHash ELFHash BKDRHash SDBMHash DJBHash APHash 可以拿对应的js即可

    C++单元测试三大框架的比较

    C++单元测试三大框架的比较软件测试1、TUT结构框架简单。添加新的测试工作量小;无须注册测试;可移植性好(因其只需两个头文件,就可以完成测试工作);便于装卸;提供接口可以扩展其输出方式等。最大的优点:轻量级,...

    Java中File类对文件的几个常见操作实例总结

    Java中File类对文件的几个常见操作实例总结

    c++ 实现的好几种排序算法

    c++ 实现的好几种基本排序算法,大概4中常见的,有时间比较

    面向C++11的轻量级同步事件框架

    它的灵感来自于几个公共事件API的设计,比如Google的Web Toolkit和流行的游戏修改框架中的API。 文件可以按原样放置到任何现有项目中,无需进行任何修改,也可以轻松修改以适应现有设计。常见调整的一个示例是用...

    《Visual C++ 2010入门教程》

    学C++用C++也有几年了,算不上熟悉,算是初窥门径吧,我想我应该做点什么帮助一下那些和曾经的我一样困惑的朋友,特别是学生朋友,告诉他们他们所困惑的问题的答案。记得我学C++的时候,没有人教,有的时候也走了...

    c++的并发模型

    这个是关于c++的几种并发模型,主要在于并发的概念和思想。

    C++进阶拔高与计算机网络

    这一些知识般在课上被老师直接跳过, 笔者在看了众多大佬的面经中,感觉这几个部 分是被问最因此挑出笔者在看了众多大佬的面经中,感觉这几个部 分是被问最因此挑出笔者在看了众多大佬的面经中,感觉这几个部 分是被...

    Accelerated C++源代码

     无数程序员曾使用本书的前几个版本学习C++,在此期间C++也逐渐发展成熟。这些年来,C++语言的发展方向以及C++程序员的关注点,已经从以往注重运行时的效率,转到千方百计地提高程序员的编程效率上。随着标准库的...

    Accelerated C++ PDF 中英文版

     无数程序员曾使用本书的前几个版本学习C++,在此期间C++也逐渐发展成熟。这些年来,C++语言的发展方向以及C++程序员的关注点,已经从以往注重运行时的效率,转到千方百计地提高程序员的编程效率上。随着标准库的...

    嵌入式 C C++语言精华文章集锦.pdf

    想成为嵌入式程序员应知道的 0x10 个基本问题 15 C 语言嵌入式系统编程修炼 22 C 语言嵌入式系统编程修炼之一: 背景篇 22 C 语言嵌入式系统编程修炼之二: 软件架构篇 24 C 语言嵌入式系统编程修炼之三: 内存操作 30 ...

    C++常见内存错误详解

    这是有道理的,原因在于调试的代价往往太大了,特别是调试系统集成之后的BUG,一个BUG花了几天甚至数周时间并非罕见。 而这些难以定位的BUG基本上可以归为两类:内存错误和并发问题。而又以内存错误最为普遍,即使...

    几道C++数据结构与算法习题

    Binary:一个二级制大数实现 Spase:一个双向十字链表实现的稀疏矩阵 SAT:一个人工智能领域常见的SAT问题求解 Arena:迷宫(递归的)路径问题

    C++语言的算法实现包括插入排序冒泡排序堆排序快速排序

    用C++语言实现的几个常见算法,里面有注解,方便大家理解,简单易学,都可以正常编译运行。

    C++中 结构体和类的区别

    学习了C++的面向对象,最常见的和写的就是类结构体,这篇文章主要简单介绍一下结构体和类的区别。  首先类是C++中面向对象独有的,但是C和C++中都有...这里主要从封装、多态、继承、封装和访问权限几个方面来分析。

Global site tag (gtag.js) - Google Analytics