几个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++指针编程中的几个常见问题 #### 一、指针编程的内涵 ##### 1.1 数据对象模型 在冯·诺依曼体系结构的计算机中,所有的数据和代码都被存储在特定的内存区域中。每个内存区域都有两个重要的属性:其一,存储...
本文将围绕“C/C++几个经典的问题”进行深入探讨,结合提供的文档标题,我们将涵盖以下几个核心知识点: 1. **面试试题与笔试题**: - **序设计员应聘常见面试试题深入剖析.doc**:这类文档通常包含各种编程问题,...
- 一个典型的C++程序由以下几个部分组成: - 包含文件:引入必要的头文件。 - 名称空间:定义或使用名称空间。 - 类和对象定义。 - 函数定义。 - 主函数(`main`),程序入口点。 10. **什么是类型转换?** - ...
《C++问题集锦》是针对C++编程语言的一个综合性的参考资料,它包含了广大程序员在学习和使用C++过程中常见的问题和疑难点。这个压缩包中的"okokok_C++ FAQ LITE — Frequently Asked Questions"文件,很可能是一个...
以下是几个关键的C++编程规范: 1. **命名约定**:变量、函数和类的命名应清晰、简洁且一致。通常,使用驼峰式命名(如myVariable)或下划线分隔(如my_variable)来区分单词。 2. **注释**:良好的注释可以帮助...
编写高效的C++代码需要注意以下几个方面: - 避免不必要的内存分配和释放。 - 使用循环展开等技术减少循环开销。 - 利用编译器优化选项。 - 减少函数调用次数,尤其是虚拟函数调用。 - 适当使用内联函数以减少函数...
"C++ Builder 几个小技巧" C++ Builder 是一款面向对象的、可视化的快速应用程序开发环境,提供了各种开发工具和组件库,能够快速创建高效的 32 位窗口应用程序。下面是使用 C++ Builder 实现的一些小技巧: 1. ...
C++代码实现时,可能包含以下几个关键部分: - **数据结构**:为了存储邮局候选地点和相关信息(如覆盖范围、成本等),可能需要自定义结构体或类。 - **分治策略**:定义如何将地图或问题空间划分为子问题,以及...
《C++语言99个常见编程错误》是Stephen C. Dewhurst结合自己多年教授C++课程的经验撰写的书籍,该书详细介绍了在C++编程中可能遇到的99个常见错误,并提供了相应的解决方案和避免策略。Stephen C. Dewhurst不仅是C++...
在本资源中,"几十个C++示例程序"提供了丰富的C++编程实践案例,旨在帮助学习者深入理解和掌握C++编程语言的核心概念和技术。这些示例程序包含了详细的代码和注释,使得初学者能够更好地理解每段代码的功能和工作...
本文将根据给定的文件信息,对几个典型的C++开发常见问题进行详细解析,并提供相应的解决策略。 #### 1. “fatal error C1010: unexpected end of file while looking for precompiled header directive” **问题...
C++编程中,常见的编译错误主要集中在指针及内存申请、释放和数组超界等几个方面。本文将对这些常见错误进行总结和分析,以供参考。 一、指针及内存申请、释放 在C++编程中,指针是一个非常重要的概念,它可以用来...
本资源包含“C++重点知识的几个程序样例附带课件”,旨在帮助学习者深入理解C++的基础知识,通过实际的程序代码加深理解,并结合课件进行系统学习。 C++的基础知识主要包括以下几个方面: 1. **语法基础**:C++是...
本文将根据提供的示例,详细解释几个常见的C++错误及其解决方案。 #### 1. IntelliSense: #error directive: Please use the /MD switch for _AFXDLL builds. **错误信息:** ``` IntelliSense: #error directive:...
这包括功能说明、使用示例、API参考以及常见问题解答。 10. **代码组织和项目管理**:遵循良好的编程实践,如模块化设计、注释清晰、代码整洁,以提高代码可读性和维护性。同时,利用C++Builder的版本控制和项目...
标题 "C、C++编写的几个简单的有用程序" 暗示了这是一个包含用C和C++编程语言编写的实用小程序集合。这些程序可能涵盖了不同的功能,旨在解决实际项目中的常见问题。C和C++是两种强大的编程语言,C语言以其高效和...
### 少儿C++编程的几个问题探讨 #### 一、算法竞赛中的数学知识学习 在探讨算法竞赛中数学知识的学习时,我们首先要明确一点,即并非所有的数学知识都适用于算法竞赛。对于少儿来说,专注于那些与算法竞赛直接相关...
以上介绍的是C++编程中常见的几类错误及其相应的解决策略。对于准备考研的同学来说,熟练掌握这些知识点不仅能帮助他们写出更高质量的代码,还能提升解决问题的能力。此外,建议定期访问像C++技术网这样的专业网站...
在八数码问题的工程文件中,可能会包含以下几个部分: - `State.h/cpp`:定义状态类,包括构造函数、比较操作符、获取邻居方法等。 - `AStarSolver.h/cpp`:实现A*算法的类,包括搜索、路径回溯等功能。 - `...
5. **问题解决方案**:资料库中包含的常见问题解决方案涵盖了安装配置、运行测试、解释报告、集成到持续集成/持续部署(CI/CD)流程等多个方面。这可以帮助开发者迅速解决问题,提高工作效率。 6. **操作指南**:对于...