高级程序设计主讲:李晓勇Email:******@Telphone:**********一、指针数组和多级指针用于处理二维数组或多个字符串指针数组定义:数组中的元素为指针变量形式:[存储类型]数据类型*数组名[数组维数];例int*p[4];区分int*p[4]与int(*p)[4]指针数组赋值与初始化赋值:voidmain(){intb[2][3],*pb[2];pb[0]=b[0];pb[1]=b[1];……..}初始化:voidmain(){intb[2][3],*pb[2]={b[0],b[1]};……..}指针数组赋值与初始化赋值:voidmain(){chara[]="Fortran";charb[]="Lisp";charc[]="Basic";char*p[4];p[0]=a;p[1]=b;p[2]=c;p[3]=NULL;……..}初始化:voidmain(){char*p[4]={"Fortran","Lisp","Basic",NULL};……..}char*p[4]={a,b,c,NULL};二、多级指针定义:指向指针的指针一级指针:指针变量中存放目标变量的地址p1&p2&i3p2(指针变量)i(整型变量)例int**p1;int*p2;inti=3;p2=&i;p1=&p2;**p1=5;二级指针:指针变量中存放一级指针变量的地址例int*p;inti=3;p=&i;*p=5;&i3P(指针变量)i(整型变量)一级指针单级间接寻址二级指针一级指针目标变量二级间接寻址多级指针例三级指针int***p;四级指针char****p;三、堆——动态内存分配1、堆的概念 全局变量和局部变量不受控制。堆:允许程序在运行时动态地分配空间。2、申请/释放函数-----C语言中 void*malloc(unsignedlong)voidfree(void*)、申请存放3个整型数的存储单元。#include<>#include<>voidmain(){int*pi;pi=(int*)malloc(3*sizeof(int));//申请空间cin>>*pi>>*(pi+1)>>*(pi+2);cout<<*pi<<*(pi+1)<<*(pi+2);free(pi);//释放空间}申请空间的大小,字节为单位说明:(1)空间申请/释放其他函数:calloc()/realloc()(2)申请与释放的对应关系 free()能释放malloc()、calloc()和realloc()申请的空间。(3)假设p=(int*)malloc(8*sizeof(int));如p==NULL则申请失败;如p不为空,则申请成功;释放时,可free(p)一次性释放这8个空间单元。(4)申请空间的指针类型必须转换。3、申请/释放操作----C++语言中new操作符:功能上相当malloc();delete操作符:功能上相当free();注意: 释放堆变量——delete指针变量名; 释放堆数组——delete[]指针变量名;例:voidmain(){int*pi;double*pd;pi=newint[3];//申请3个存储空间pd=newdouble;//申请1个存储空间cin>>*pi>>*(pi+1)>>*(pi+2)>>*pd;cout<<*pi<<“,”<<*(pi+1)<<“,”<<*(pi+2)<<“,”<<*pd<<endl;delete[]pi;//释放空间deletepd;}四、指针与常量三种形式:指向常量的指针;指针常量;指向常量的指针常量;(1)指向常量的指针定义格式: constint*p;//p为指向常量的指针含义:*p为常量,不能修改;p为变量,可改。如 constinta=90; constint*p;//p为指向常量的指针 intb=80;则 p=&a; p=&b; *p=123;(2)指针常量定义格式: int*constp;//p为指针常量指针常量如有, intc,b=80; constinta=90; int*constp1=&b;int*constp2=&a; constint*s=&a; *p1=123; p1=&a;含义: p为常量,不能修改;*p为变量,可改。 p的值必须初始化时确定。
高级程序设计 来自淘豆网m.daumloan.com转载请标明出处.