C++ 面试题(51-55)

51、用变量a给下面定义

函数指针: 函数返回值类型 (* 指针变量名) (函数参数列表);

一个整型数 int a
一个指向整型数的指针 int *a
一个指向指针的指针,他指向的指针是一个指向一个整型数 int** a;
一个有10个整型数的数组int a[10]
一个有10个指针的数组,该指针指向一个整数 int *a[10];
一个指向有10个整型数数组的指针 int(*a)[10]
一个指向函数的指针,该函数有一个整型参数并返回一个整型数int(*a)(int)
一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数:int(*a[10])(int)

53、找出下列程序的错误

typedef unsigned short int USHORT;
#include <iostream.h>
int main()
{
	USHORT* pInt = new USHORT;
	*pInt = 10;
	cout <<"*pint"<< *pInt << endl;
	delete pInt;
	pInt = 0;	\\更改指针为空指针
	long* pLong = new long;
	*pLong = 90000;
	cout <<"*pLong"<< *pLong << endl;
	*pInt = 20;	\\---报错,空指针不能赋值
	cout <<"*pint"<< *pInt << endl;
	cout <<"*pLong"<< *pLong << endl;
	delete pLong;
	return 0;
}	

typeof和define区别
解析
以上程序使用了迷途指针并重新赋值,造成系统崩溃。
以上程序使用了空指针,给指针赋值为0 等于将指针置空

迷途指针,或称悬空指针、野指针,指的是不指向任何合法的对象的指针

54、空指针和迷途指针的区别是什么。

解析
当delete一个指针的时候,他实际上仅是让编译器释放内存,但是指针本身依然存在,这时候他就是一个迷途指针。
当使用以下语句的时候可以把迷途指针改成空指针
myptr = nullptr
通常如果在删除一个指针后又删除一次,程序就会变得非常不稳定,任何情况都有可能发生,但是如果只是删除一个空指针,则什么事都不

会发生,这样做非常安全。
使用迷途指针或者空指针是非法的,而且有可能造成程序崩溃。如果指针是空指针,尽管同样是崩溃,但他桶迷途指针造成的崩溃相比是可

以预料的崩溃,这样调试起来方便多了。

55、C++中有了malloc/free,为什么还需要new/delete?

解析
malloc与free是C++/C语言的 标准库函数,new/delete是C++的运算符,他们都可以用于动态申请内存和释放内存。对于非内部数据类型对象而言,光用malloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象再消亡的之前要自动执行析构函数,由于 malloc/free是库函数而不是运算符,不在编译器的控制权限之内,不能够把执行构造函数和析构函数的任务强加于 malloc/free。
因此C++语言需要一个能够完成动态分配内存和初始化工作的运算符new,以及能够完成清理和释放内存工作的运算符delete。new/delete不是库函数,而是运算符。
完整解析
点击传送

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值