C语言程序设计第11章指针和数组课件.ppt

上传人:牧羊曲112 文档编号:3861294 上传时间:2023-03-25 格式:PPT 页数:42 大小:3.57MB
返回 下载 相关 举报
C语言程序设计第11章指针和数组课件.ppt_第1页
第1页 / 共42页
C语言程序设计第11章指针和数组课件.ppt_第2页
第2页 / 共42页
C语言程序设计第11章指针和数组课件.ppt_第3页
第3页 / 共42页
C语言程序设计第11章指针和数组课件.ppt_第4页
第4页 / 共42页
C语言程序设计第11章指针和数组课件.ppt_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《C语言程序设计第11章指针和数组课件.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计第11章指针和数组课件.ppt(42页珍藏版)》请在三一办公上搜索。

1、第11章 指针和数组,本章学习内容,指针与一维数组间的关系,指针与二维数组间的关系 向函数传递一维数组和二维数组 指针数组,命令行参数 动态数组,动态内存分配,11.1 指针和一维数组间的关系,int a4=1,2,3,4;,0 x0037b000,a0,0 x0037b004,0 x0037b008,0 x0037b00B,a,.,.,1,int*pa=a;,pa,int*pa=,2,3,4,a1,a2,a3,数组名是一个常量指针不能修改该指针的指向,指针可当数组名使用,11.1 指针和一维数组间的关系,int a4=1,2,3,4;,0 x0037b000,a0,0 x0037b004,0

2、 x0037b008,0 x0037b00B,a,.,.,1,int*pa=a;,pa,int*pa=,2,3,4,a1,a2,a3,数组元素的等价引用形式ai*(a+i)pai*(pa+i),a+1,*(a+1),pa0,*(pa+2),pa+2,*pa,11.1 指针和一维数组间的关系,int a4=1,2,3,4;,0 x0037b000,a0,0 x0037b004,0 x0037b008,0 x0037b00B,a,.,.,1,p,2,3,4,a1,a2,a3,for(i=0;i4;i+)scanf(%d,for(p=a;p(a+4);p+)scanf(%d,p);for(p=a;p

3、(a+4);p+)printf(%d,*p);,*p,*p,a+4,11.1 指针和一维数组间的关系,【例11.1】演示数组元素的引用方法,11.1 指针和一维数组间的关系,【例11.1】演示数组元素的引用方法,11.1 指针和一维数组间的关系,【例11.2】演示数组和指针变量作函数参数,被调函数的形参声明为数组类型,用下标法访问数组元素,11.1 指针和一维数组间的关系,【例11.2】演示数组和指针变量作函数参数,被调函数的形参声明为指针类型,用指针法访问数组元素,11.1 指针和一维数组间的关系,【例11.2】演示数组和指针变量作函数参数,在主函数中这样做没有多大的实际意义,11.2 指针

4、和二维数组间的关系,可将二维数组看作一维数组,其每个数组元素又是一个一维数组按行顺序存放所有元素,a0,a1,a0+1,a0+2,&a00,&a10,&a11,a1+1,&a12,&a01,&a02,a1+2,short a23;,a,a+1,11.2 指针和二维数组间的关系,short a23;,a,a+1,a 代表二维数组的首地址,第0行的地址,行地址,a+i 代表第i行的地址但并非增加i个字节!,a0,a1,&a00,&a10,short a23;,*(a+i)即 ai 代表第i行第0列的地址,列地址,a,a+1,*(a+i)+j 即 ai+j代表第i行第j列的地址&aij,&a12,a

5、1+2,11.2 指针和二维数组间的关系,a0,a1,&a00,&a10,short a23;,a,a+1,&a12,a1+2,*(*(a+i)+j)即 aij 代表第i行第j列的内容,*(a+i)即 ai 代表第i行第0列的地址,列地址,*(a+i)+j 即 ai+j代表第i行第j列的地址&aij,11.2 指针和二维数组间的关系,二维数组的行指针int(*p)3;p=a;/用行地址初始化逐行查找-逐列查找,short a23;,a,a+1,11.2 指针和二维数组间的关系,二维数组的行指针int(*p)3;p=a;/用行地址初始化逐行查找-逐列查找,short a23;,a+1,a,11.

6、2 指针和二维数组间的关系,二维数组的行指针int(*p)3;p=a;/用行地址初始化逐行查找-逐列查找for(i=0;im;i+)for(j=0;jn;j+)printf(%d,*(*(p+i)+j);,short a23;,a,a+1,11.2 指针和二维数组间的关系,二维数组的列指针int*p;p=*a;/用列地址初始化逐个查找相对偏移量for(i=0;im;i+)for(j=0;jn;j+)printf(%d,*(p+i*n+j);,short a23;,*a或a0,pi*n+j,11.2 指针和二维数组间的关系,【例11.3】输入一个3行4列的二维数组,然后输出这个二维数组的元素值,

7、11.2 指针和二维数组间的关系,【例11.3】输入一个3行4列的二维数组,然后输出这个二维数组的元素值,11.2 指针和二维数组间的关系,形参声明为列数已知的二维数组,【例11.3】输入一个3行4列的二维数组,然后输出这个二维数组的元素值,11.2 指针和二维数组间的关系,形参声明为指向列数已知的二维数组的行指针,【例11.3】输入一个3行4列的二维数组,然后输出这个二维数组的元素值,11.2 指针和二维数组间的关系,形参声明为指向二维数组的列指针,【例11.3】输入一个3行4列的二维数组,然后输出这个二维数组的元素值,11.2 指针和二维数组间的关系,指针和数组作函数参数,通过指针或数组参

8、数,使调用者获得修改后的数据通过一个参数把大量的数据送到函数内如果只向内传送数据,就把参数定义为const,防止意外修改数据,也让函数的功能更明确void PrintArray(const int*p,int n).void PrintArray(const int a,int n).,指针、数组以及其他的类型混合,基本数据类型int、long、char、short、float、double数组是一种数据类型是从其他类型派生的类型每个元素都有一个类型指针是一种数据类型是从其他类型派生的类型XX类型的指针任何类型都可以作指针或者数组的基类型,11.3指针数组及其应用,用指针作数组的基类型?指针数

9、组(Pointer Array)元素均为指针类型数据的数组定义形式为:数据类型*数组名数组长度;例如char*ptr5;,ptr,5,*,char,第10章【例10.4】国名字符串排序二维数组,char nameNMAX_LEN;.for(i=0;in-1;i+)for(j=i+1;jn;j+)if(strcmp(strj,stri)0)strcpy(temp,stri);strcpy(stri,strj);strcpy(strj,temp);,MAX_LEN,N,物理排序,【例11.4】国名字符串排序指针数组,char*ptrN;.for(i=0;in-1;i+)for(j=i+1;jn;j

10、+)if(strcmp(ptrj,ptri)0)temp=ptri;ptri=ptrj;ptrj=temp;,N,索引排序,【例11.4】国名字符串排序指针数组,【例11.4】国名字符串排序指针数组,11.3.2指针数组用于表示命令行参数,GUI界面之前,计算机的操作界面都是字符式的命令行界面(DOS、UNIX、Linux)通过命令行参数(Command Line Arguments),使用户可以根据需要来决定程序干什么、怎么干main(int argc,char*argv)当你把main函数写成这样时argc的值为:参数的数目+1argv0为指向命令名的字符指针argvx(x1)为指向每个参

11、数的字符指针,【例11.5】演示命令行参数与main函数各形参之间的关系,int main(int argc,char*argv)int i;printf(The number of command line arguments is:%dn,argc);printf(The program name is:%sn,argv0);if(argc 1)printf(The other arguments are following:n);for(i=1;iargc;i+)printf(%sn,argvi);return 0;,如何输入命令行参数?echo.exe programming is f

12、un,【例11.5】演示命令行参数与main函数各形参之间的关系,int main(int argc,char*argv)int i;printf(The number of command line arguments is:%dn,argc);printf(The program name is:%sn,argv0);if(argc 1)printf(The other arguments are following:n);for(i=1;iargc;i+)printf(%sn,argvi);return 0;,The number of command line arguments is

13、:4The program name is:echo.exeThe other arguments are following:programming is fun,11.4.1 C程序的内存映像,C程序中变量的内存分配方式 从静态存储区分配全局变量和静态变量 在栈上创建 存放函数参数值、局部变量值等在执行函数调用时,系统在栈上为函数内的局部变量及形参分配内存,函数执行结束时,自动释放这些内存从堆上分配 在程序运行期间,用动态内存分配函数来申请的内存都是从堆上分配的,动态内存的生存期由程序员自己来决定,11.4.2动态内存分配函数,Two primary methods of allocati

14、ng memory:,void*malloc(unsigned int size);,void*calloc(unsigned int num,unsigned int size);,#include#include,void*类型的指针可以指向任意类型的变量,通常强转(Type*)为其他类型,11.4.2动态内存分配函数,Two primary methods of allocating memory:,void*malloc(unsigned int size);,void*calloc(unsigned int num,unsigned int size);,向系统申请大小为size的内

15、存块把首地址返回,若申请不成功则返回NULL,向系统申请num个size大小的内存块把首地址返回,若申请不成功则返回NULL,11.4.2动态内存分配函数,void*free(void*p);,释放由malloc()和calloc()申请的内存块p是指向此块内存的指针free时系统标记此块内存为未占用,可被重新分配,Method of deallocating memory:,确保指针使用前是非空指针,释放向系统申请的存储空间,11.4.3【例11.6】一维动态数组,像使用一维数组一样使用动态数组,11.4.3【例11.6】一维动态数组,确保指针使用前是非空指针,释放向系统申请的存储空间,11.4.4【例11.7】二维动态数组,仍当作一维数组来使用,11.4.4【例11.7】二维动态数组,Questions and answers,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号