面试题3:sizeof和strlen的区别
sizeof和strlen有以下区别:
sizeof是一个操作符,strlen是库函数。
sizeof的参数可以是数据的类型,也可以是变量,而strlen只能以结尾为‘\0‘的字符串作参数。
编译器在编译时就计算出了sizeof的结果。而strlen函数必须在运行时才能计算出来。并且sizeof计算的是数据类型占内存的大小,而strlen计算的是字符串实际的长度。
数组做sizeof的参数不退化,传递给strlen就退化为指针了。
注意:有些是操作符看起来像是函数,而有些函数名看起来又像操作符,这类容易混淆的名称一定要加以区分,否则遇到数组名这类特殊数据类型作参数时就很容易出错。最容易混淆为函数的操作符就是sizeof。
strlen()与sizeof()考点,一步到位!
看下msdn的官方解释:
Strlen——Get the length of a string.
size_t strlen( const char *string );
Each ofthese functions returns the number of characters in
string, notincluding the terminating null character.
函数返回string里的字符数,不包括终止字符’\0’。
sizeof Operator
运算符
sizeof
expression
The sizeofkeyword gives the amount of storage, in bytes, associated with a variable or atype (including aggregate types). This keyword returns a value of type
size_t.
//返回变量或类型(包括集合类型)存储空间的大小,
The expressionis either an identifier or a type-cast expression (a type specifier enclosed inparentheses).
When appliedto a structure type or variable,
sizeof returns the actual size, whichmay include padding bytes inserted for alignment. When applied to a staticallydimensioned array,
sizeof returns the size of the entire array. The sizeofoperator cannot return the size of dynamically allocated arrays or externalarrays.
//应用结构体类型或变量的时候,sizeof()返回事实的大小,包括为对齐而填充字节。当应用到静态数组时,sizeof()返回整个数组的大小。sizeof()不会返回动态分配数组或扩展数组的大小。
char str[] = “Hello” ;
char *p = str ;
int n = 10;
请计算
sizeof (str) = //5 str所占据的存储空间大小
sizeof ( p )= //4
指针类型
sizeof ( n )= //4
整形占据的存储空间
void Func ( char str[100])
{
请计算
sizeof( str ) = //4
此时str转化为指针大小仍为4
}
void *p = malloc( 100 );
请计算
sizeof ( p ) = //4
指针大小4
面试题5:C中的malloc和C++中的new有什么区别
malloc和new有以下不同:
(1)new、delete是操作符,可以重载,只能在C++中使用。
(2)malloc、free是函数,可以覆盖,C、C++中都可以使用。
(3)new可以调用对象的构造函数,对应的delete调用相应的析构函数。
(4)malloc仅仅分配内存,free仅仅回收内存,并不执行构造和析构函数
(5)new、delete返回的是某种数据类型指针,malloc、free返回的是void指针。
注意:malloc申请的内存空间要用free释放,而new申请的内存空间要用delete释放,不要混用。因为两者实现的机理不同。
面试题8:a和&a有什么区别
请写出以下代码的打印结果,主要目的是考察a和&a的区别。
#include<stdio.h>
void main( void)
{
inta[5]={1,2,3,4,5};
int*ptr=(int *)(&a+1); //此处&a是数组的指针,1实际1个数组长度
1*5*4 = 20个字节;
int*ptr2 = (int *)(a+1);
printf("%d,%d\n",*(a+1),*(ptr-1)); //
printf("%d,%d\n",*(a+1),*(ptr2-1));
}
注意:数组名a可以作数组的首地址,而&a是数组的指针。对比上两式子的不同。
&a+1,&a为代表a数组的指针,1根据&a变化代表了int
a[5]数组的大小,为4*5=20个字节。
a+1, a代表数组a的首地址,1代表数组a中1个元素的长度,为4个字节。
int *ptr = (int *)(&a + 1),代表ptr指向a数组20个字节后的一块内存区域,显然,该内存区域未定义,为一个随机值。而*(ptr-1),此处ptr减去1*4个字节长度,*(ptr-1)指向a[5];
而int *ptr2 = (int *)(a+1),代表指向数组首地址1*4个字节后元素,即a[1] = 2;即ptr2指向a[2],此处的*a
= *(a+0) = a[0], *(a+1) = a[1],依次类推。
面试题9:简述C、C++程序编译的内存分配情况
C、C++中内存分配方式可以分为三种:
(1)从静态存储区域分配:
内存在程序编译时就已经分配好,这块内存在程序的整个运行期间都存在。速度快、不容易出错,因为有系统会善后。例如全局变量,static变量等。
(2)在栈上分配:
在执行函数时,函数内局部变量的存储单元都在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
(3)从堆上分配:
即动态内存分配。程序在运行的时候用malloc或new申请任意大小的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由程序员决定,使用非常灵活。如果在堆上分配了空间,就有责任回收它,否则运行的程序会出现内存泄漏,另外频繁地分配和释放不同大小的堆空间将会产生堆内碎块。
一个C、C++程序编译时内存分为5大存储区:堆区、栈区、全局/静态区、文字常量(字符常量)区、程序代码区。
面试题11:设置地址为0x67a9的整型变量的值为0xaa66
int *ptr;
ptr = (int *)0x67a9;
*ptr = 0xaa66;
说明:这道题就是强制类型转换的典型例子,无论在什么平台地址长度和整型数据的长度是一样的,即一个整型数据可以强制转换成地址指针类型,只要有意义即可。
但是,此处的转换,编译没有问题,但是运行的时候可能会出错。因为Ox67a9这块地址可能被占用……
面试题13:C++的空类有哪些成员函数
1)缺省构造函数。
2)缺省拷贝构造函数。
3)缺省析构函数。
4)缺省赋值运算符。
5)缺省取址运算符。
6)缺省取址运算符 const。
注意:有些书上只是简单的介绍了前四个函数。没有提及后面这两个函数。但后面这两个函数也是空类的默认函数。另外需要注意的是,只有当实际使用这些函数的时候,编译器才会去定义它们。
面试题14:谈谈你对拷贝构造函数和赋值运算符的认识
拷贝构造函数和赋值运算符重载有以下两个不同之处:
(1)拷贝构造函数生成新的类对象,而赋值运算符不能。
(2)由于拷贝构造函数是直接构造一个新的类对象,所以在初始化这个对象之前不用检验源对象是否和新建对象相同。而赋值运算符则需要这个操作,另外赋值运算中如果原来的对象中有内存分配要先把内存释放掉
注意:当有类中有指针类型的成员变量时,一定要重写拷贝构造函数和赋值运算符,不要使用默认的。
面试题15:用C++设计一个不能被继承的类
class A
{
private:
A() {}
~A() {}
};
class B : virtual public A
{
public:
B(){}
~B(){}
};
class C : virtual public B
{
public:
C() {}
~C() {}
};
void main( void )
{
B b;
//C c;
return;
}
注意:构造函数是继承实现的关键,每次子类对象构造时,首先调用的是父类的构造函数,然后才是自己的。
此处,如果将父类构造函数写成私有的,便不能完成继承操作。这是考察点。
待完善!加油!2012/7/27 向原作者致敬!
分享到:
相关推荐
在C/C++编程语言中,面试常常涉及到一些基础但至关重要的知识点,比如`sizeof`和`strlen`的区别、`malloc`与`new`的不同以及数组和指针的使用。下面我们将详细探讨这些主题。 首先,`sizeof`和`strlen`是两个在处理...
这份“C/C++面试题库”便是为此目的而整理,包含了丰富的题目和答案,旨在帮助求职者全面准备C/C++面试。 1. **基础概念** - C/C++的基础语法,如变量声明、数据类型、运算符、流程控制等是面试的常见考点。理解...
总之,“C/C++笔试题面试题文档集合”是一份全面的复习资料,涵盖了C++语言的各个方面,从基础到高级,对于准备C++面试的求职者来说,具有很高的参考价值。通过深入学习和实践这些题目,不仅可以提升C++技能,也能...
这份"历史上最全的c/c++面试资料"压缩包显然是一个精心整理的资源集合,旨在帮助求职者或开发者更好地准备C/C++相关的面试。下面,我们将深入探讨这个压缩包可能包含的知识点。 1. **基本语法**:C/C++的基础语法...
2. **C和C++面试题目汇总 - 副本.doc**:这份文档包含了C++和C语言的面试题,强调了两者之间的联系与差异,要求面试者不仅了解C++,还要掌握C语言的基础知识。 3. **c++面试题300.rar**:这300道题目涵盖了C++的...
在准备C/C++面试的过程中,理解并掌握一系列关键知识点至关重要。这份资料集合涵盖了大量面试可能会出现的问题,虽然可能有些重复,但无疑是全面复习的理想资源。以下是对这些知识点的详细阐述: 1. **基础语法**:...
50个C、C++面试题.pdf C++ 数据结构、算法笔试题.docx C++基础面试题.docx C++开发工程师面试题库.docx C++技能测试试卷一及答案.docx C++技能测试试卷二及答案.docx c++笔试面试宝典.docx C++笔试面试题带答案.docx...
本文将详细解析C++和C笔试题中的常见知识点,以帮助求职者准备面试和笔试。 首先,C++是C语言的一个扩展,它引入了面向对象编程(OOP)的概念,如类、对象、封装、继承、多态等。在笔试中,你需要了解这些基本概念...
这份压缩包包含了牛客网整理的C++工程师校招面试考点,旨在帮助求职者全面理解和掌握C++的核心知识,提升面试通过率。 一、基础知识 C++的基础知识是面试中的重点,包括但不限于以下几个方面: 1. **数据类型**:...
- **C基础与算法**:在C++工程师的面试中,C基础知识和算法是必考且占比重大的部分。掌握良好的C基础和算法能力对于能否拿到高薪offer或进入知名企业具有决定性影响。面试官往往会从题库中抽取问题进行提问,而不是...
### C++ 面试题详解 #### 1. `new`、`delete`、`malloc`、`free` 关系 - **`new` 和 `delete`**:这两个是 C++ 的运算符,用于动态内存分配和释放。`new` 在分配内存后还会调用构造函数来初始化对象;`delete` 在...
在技术面面试中,除了考察一些基础的计算机知识外,对语言掌握情况的考察,也是面试中占比非常大的一部分,那,今天就来介绍一下...4.千方百计c语言部分(500题)(重点推荐)。 5.王牌7 C++常见面试题。 6.智力题整理。
目录 1. C 语言中的指针和内存泄漏 5 2. C语言难点分析整理 10 3. C语言难点 18 4. C/C++实现冒泡排序算法 32 5. C++中指针和引用的区别 35 6. const char*, char ...84. C语言惠通面试题 428 85. C语言常用宏定义 450
1. **C++面试基础**: - **C++语法**:理解并掌握基本的变量、数据类型、控制结构(如if-else、switch-case、循环)、函数、数组、指针、引用等。 - **面向对象编程**:深入理解类、对象、封装、继承、多态等概念...
历年笔试题可以帮助后来的应聘者了解题型、难度以及可能的考察重点,而经验分享则可能提供如何准备、如何应对测试的实用建议。 【标签】"CVTE 网侧 笔试"强调了这是关于CVTE公司的网络面试(或称在线测试)环节,...
【标题】"最权威的程序员面试题"涵盖了程序员在求职过程中可能会遇到的各类技术面试问题,包括了C、C++以及Java这三个主流编程语言的重点知识。这些面试题旨在测试候选人的编程基础、算法理解、软件工程实践以及问题...
根据给定文件的信息,本文将围绕“微软笔试面试整理题”的相关内容进行展开,重点解析微软笔试面试中的几个关键方面:技术基础知识考查、智力题目、英语能力以及想法类题目,并给出一些建议。 ### 技术基础知识考查...
C/C++面试题基础系列 1. 《程序员面试宝典》、《程序员面试攻略》:提供了C/C++面试的常见问题和解答。 2. 《C/C++程序员生存手册》:系统地介绍了C/C++编程的基本概念和技术。 高质量代码系列 1. 《高质量程序...
在C语言中,算法和面试题是程序员必备...以上内容只是C++面试中的一部分重点,实际的面试可能会涉及到更深层次的技术细节和实际问题解决能力。通过深入学习和实践这些知识点,可以显著提高C++程序员在面试中的竞争力。