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不是库函数,而是运算符。
完整解析
点击传送