直奔主题:
1. 引用与指针的区别
引用是变量的别名,在使用上与原变量完全一样。
1>引用使用时要求:
①引用在创建时必须初始化 ——指针可以在任何时候初始化
②引用一旦创建就不能再更改引用关系 ——指针还可以指向其他对象
③引用不能为NULL
2>指针需要单独分配空间,引用不会单独分配空间。具体:
char *p = (char *)malloc(100);
int ip[10];
sizeof(指针) 32位系统是4字节
sizeof(ip) 40
sizeof()作用:是C/C++的一个操作符,返回一个对象或类型所占内存字节数。
3>作为函数参数时:
Void func(int &a); void func(int *a);
都可以对a所指向或a的引用对象进行更改,区别在于:
&a 完全没有复制过程,直接在指向对象上面操作
*a需要将对象的指针复制
2. 自己实现strcpy()
#include
#include
char *my_strcpy(char *dest, const char *src)
{assert((dest != NULL) && (src != NULL));
int i;
for (i = 0; src[i] != '\0'; i++)
{
dest[i] = src[i];
}
dest[i] = '\0';
return dest;
}
注意:
int a[]={1,12,23};
int *p=a;printf("%d\n",*p++);
输出 a[0]的值 1,后加加:表达式里先用原值,不自增。
3. new、delete、malloc、free联系与区别
相同点:都可以用于动态申请内存和释放内存。
不同点:
malloc/free 是C/C++的标准库函数, new/delete是C++运算符
new可以自动分配空间大小, malloc需要手动指出分配字节的大小。
malloc 返回的是void *类型,所以需要手动指出类型
new 是类型安全的, malloc 不是
int* p = new float[2]; // 编译时指出错误 类型不匹配 int* p = malloc(2*sizeof(float)); // 编译时无法指出错误 强制转换类型
Obj *objects = new Obj[100]; //不能写成有参构造 Obj *objects = new Obj[100](1); ×
Delete []objects ;
4. 某32位系统下,默认4字节对齐,使用sizeof()进行计算:
char str[] = “12345”;
char *p = str;
int n = 10;
5. 求函数返回值, 输入x = 107 和 x = 1571, 并说明返回值含义
int func(int x)
{
int count = 0;
while(x)
{
count++;
x = x & (x-1);
}
return count;
}
将x转为二进制,查看1的个数。
6. sizeof 与 strlen的区别
sizeof是C/C++中的运算符,作用是返回对象或类型在内存中所占字节数。
strlen是C语言中的库函数,用来计算字符串长度,直到空结束字符,但不包括空结束字符。
所在头文件为#include
7. 在C++程序中调用被C编译器编译后的函数,为什么要加 extern “C” ?
告诉编译器该部分语法按照C语言语法编译
8. 一个类有基类、内部有一个其他类的成员对象,请问该子类、基类、和内部类的成员对象的构造函数执行顺序?
先调用基类构造函数、再调用其他类成员构造函数、最后调用自己类的构造函数。
先构造、后析构。
9. 写一个标准宏,该宏输入两个参数,并返回较小的一个。
10. 一个由C/C++编译程序占用内存分为以下几个部分
1、栈区(stack)— 由编译器自动分配释放 ,存放函数参数值,局部变量值
等。其操作方式类似于数据结构中栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中堆是两回事,分配方式倒是类似于链表。
3、全局区(静态区)(static)—,全局变量和静态变量存储是放在一块,初始化全局变量和静态变量在一块区域, 未初始化全局变量和未初始化静态变量在相邻另一块区域。- 程序结束后由系统释放。–>分别是data区,bbs区
4、文字常量区 —常量字符串就是放在这里。程序结束后由系统释放–>coment区
5、程序代码区—存放函数体二进制代码。–>code区
深度探索C++对象模型: sizeof(空类) 为何是1 ?
那是被编译器插进去的一个char ,使得这个class的不问同实体(答object)在内存中配置独一无二的内地址。容也就是说这个char是用来标识类的不同对象的