C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计
“ 目录 C++语言程序设计 基本知识 编程技能 刨根问底 指针与函数 指针与字符串 指针 void类型指针 指针与数组 动态内存 指针与结构体 指针 动态内存 引用 void类型指针 内存泄漏与悬挂指针 C++语言程序设计
刨根问底 a C++语言程序设计
(I)void 类型指针 void类型指针 指针除了可以指向各种类型的数据外,还可以定义为“无类型” C++语言程序设计
(I)void 类型指针 void类型指针使用的特点 void类型指针具有很好的通用性 任何其他类型的指针都可以赋值给void指针 C++语言程序设计
(I)void 类型指针 例:使用memcpy()函数复制数组 函数原型:void *memcpy( void *dest, const void *src, size_t count ); //使用memcpy()函数复制数组 #include <iostream> #include <cstring> using namespace std; void main() { char src[10]="012345678"; char dest[10]; //复制字符数组 char* pc=(char*)memcpy(dest,src,10); cout <<pc <<endl; int s1[3]={1,2,3}; int d1[3]; //复制整型数组 int *pi=(int*)memcpy(d1,s1,12); cout<<*pi<<“ ”<<*(pi+1)<<“ ”<<*(pi+2)<<endl; } C++语言程序设计
void类型指针一个具体的应用:显示字符指针的内容 (I)void 类型指针 void类型指针一个具体的应用:显示字符指针的内容 用cout输出字符指针时,是输出它所指向的字符串 用cout语句输出字符指针的值时,需将字符指针强制转换为void指针 例如: char *pch="Hello C++"; cout<<pch<<endl; cout<<(void*)pch<<endl; 显示为: Hello C++ 0x0042501C C++语言程序设计
(II)内存泄漏和指针悬挂 内存泄漏 是指动态申请的内存空间没有正常释放,但是也不能继续使用的情况 例如: char *pch1=0; pch1 = new char('A'); char *pch2 = new char; pch1=pch2; 最常出现的情况是申请了动态内存后,没有正常地用delete来释放,导致内存泄漏 void func(){ int *piarray=new int[100];} 内存泄漏造成内存容量不够时,程序运行崩溃 C++语言程序设计
(II)内存泄漏和指针悬挂 指针悬挂 是让指针指向一个已经释放的空间 例如: char *pch1, *pch2; pch1 = new char; pch2 = pch1; *pch2 = 'B'; delete pch1; pch1=NULL; pch2指向已经释放的内存空间,形成指针悬挂,使用该指针进行操作时,会出现运行时错误 例如:delete pch2; 使用动态内存时要特别小心,应避免出现内存泄漏和指针悬挂的问题 C++语言程序设计