手机版

C语言程序设计-第十一章

发布时间:2021-06-07   来源:未知    
字号:

......

第11章 指针和数组 11章

......

本章学习内容指针与一维数组间的关系,指针与二维 指针与一维数组间的关系, 数组间的关系 向函数传递一维数组和二维数组 指针数组, 指针数组,命令行参数 动态数组, 动态数组,动态内存分配

2012-4-2

2/42

......

11.1 指针和一维数组间的关系int a0x0037b000

a[4]={1,2,3,4};….

int *pa=a; int *pa=&a[0];

pa0x0037b004 0x0037b008 0x0037b00B

1 2 3 4…...

a[0] a[1] a[2] a[3] 指针可当数组名使用 数组名是一个常量指针 不能修改该指针的指向

2012-4-2

3/42

......

11.1 指针和一维数组间的关系int a0x0037b000

a[4]={1,2,3,4};….

int *pa=a; int *pa=&a[0];

pa0x0037b004

1 pa[0] 2 *(a+1)

a[0] a[1] a[2] a[3] 数组元素的等价引用形式 a[i] *(a+i) pa[i] *(pa+i)

a+10x0037b008

3 pa+2 *(pa+2) 0x0037b00B 4 *pa…...

2012-4-2

4/42

......

11.1 指针和一维数组间的关系int a0x0037b000

a[4]={1,2,3,4};….

for (i=0; i<4; i++) scanf("%d", &a[i]); for (i=0; i<4; i++) printf("%d ", a[i]);

p0x0037b004 0x0037b008 0x0037b00B

1 *p 2 *p 3 4…...

a[0] a[1] a[2] a[3]

for (p=a; p<(a+4); p++) scanf("%d", p); for (p=a; p<(a+4); p++) printf("%d ", *p);5/42

a+42012-4-2

......

11.1 指针和一维数组间的关系【例11.1】演示数组元素的引用方法 11.1】

2012-4-2

6/42

......

11.1 指针和一维数组间的关系【例11.1】演示数组元素的引用方法 11.1】

2012-4-2

7/42

......

11.1 指针和一维数组间的关系【例11.2】演示数组和指针变量作函数参数 11.2】被调函数的形参声明为 数组类型, 数组类型,用下标法访 问数组元素

2012-4-2

8/42

......

11.1 指针和一维数组间的关系【例11.2】演示数组和指针变量作函数参数 11.2】被调函数的形参声明为 指针类型 类型, 指针类型,用指针法访 问数组元素

2012-4-2

9/42

......

11.1 指针和一维数组间的关系【例11.2】演示数组和指针变量作函数参数 11.2】在主函数中这样做没有 多大的实际意义

2012-4-2

10/42

......

11.2 指针和二维数组间的关系可将二维数组看作一维数组,其每个数组元素又是 可将二维数组看作一维数组, 一个一维数组a a[0][0] 按行顺序存放所有元素 &a[0][0] a[0] short a[2][3];a[0] a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]a[0][0] a[0][1]

&a[0][1] a[0]+1 &a[0][2] a[0]+2 a+1 &a[1][0] a[1] a[1][0] &a[1][1] a[1]+1 &a[1][2] a[1]+2a[0][2] a[1][0] a[1][1] a[1][2]11/42

aa[1]

2012-4-2

......

11.2 指针和二维数组间的关系a 代表二维数组的首地址,第0行的地址,行地址 代表二维数组的首地址, 的地址, a + i 代表第i行的地址 代表第 但并非增加i个字节! 但并非增加i个字节!short a[2][3];a[0] a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]

aa[0][0] a[0][1] a[0][2]

a+1a[1][0] a[1][1] a[1][2]12/42

aa[1]

2012-4-2

......

11.2 指针和二维数组间的关系*(a + i) 即 a[i] 代表第i行

第0列的地址,列地址 代表第 行 的地址,a *(a+i) + j 即 a[i] + j代表 &a[0][0] a[0] 代表 a[0][0]

的地址&a[i][j] 第i行第j列的地址 行short a[2][3];a[0] a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]

a[0][0] a[0][1]

a+1 &a[1][0] a[1] a[1][0]

a[0][2] a[1][0] a[1][1]

aa[1]

&a[1][2] a[1]+2

a[1][2]13/42

2012-4-2

......

11.2 指针和二维数组间的关系*(a + i) 即 a[i] 代表第i行第0列的地址,列地址 代表第 行 的地址,a *(a+i) + j 即 a[i] + j代表 &a[0][0] a[0] 代表 a[0][0]

的地址&a[i][j] 第i行第j列的地址 行 *( *(a+i) + j ) 即 a[i][j] a[0][0] 代表第 行第 行第j列 代表第i行第 列的内容 a[0] a[0][1] aa[1] a[0][2] a[1][0] a[1][1] a[1][2]

a[0][0] a[0][1]

short a[2][3];

a+1 &a[1][0] a[1] a[1][0]

a[0][2] a[1][0] a[1][1]

&a[1][2] a[1]+2

a[1][2]14/42

2012-4-2

......

11.2 指针和二维数组间的关系二维数组的行 二维数组的行指针int (*p)[3]; p = a; //用行地址初始化 //用行地址初始化 short a[2][3];

p

aa[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]

逐行查找逐行查找-〉逐列查找a+1

2012-4-2

15/42

......

11.2 指针和二维数组间的关系二维数组的行 二维数组的行指针int (*p)[3]; p = a; //用行地址初始化 //用行地址初始化 short a[2][3]; aa[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]2012-4-2 16/42

逐行查找逐行查找-〉逐列查找a+1

p

......

11.2 指针和二维数组间的关系二维数组的行 二维数组的行指针int (*p)[3]; p = a; //用行地址初始化 //用行地址初始化 short a[2][3]; aa[0][0] a[0][1] a[0][2] a[1][0] a[1][1]

逐行查找逐行查找-〉逐列查找for (i=0; i<m; i++) for (j=0; j<n; j++) printf("%d",*(*(p+i)+j)); *(*(p+i)+j)); a+1

p2012-4-2

a[1][2]17/42

......

11.2 指针和二维数组间的关系二维数组的列 二维数组的列指针int *p; p = *a; //用列地址初始化 //用列地址初始化 short a[2][3]; *a或 p *a或 a[0]a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]2012-4-2 18/42

逐个查找—— 逐个查找——相对偏移量 ——相对偏移量for (i=0; i<m; i++) for (j=0; j<n; j++) printf("%d",*(p+i*n+j)); *(p+i*n+j) p[i*n+j i*n+j]

......

11.2 指针和二维数组间的关系【例11.3】输入一个3行4列的 11.3】输入一个3 二维数组, 二维数组,然后输出这个 二维数组的元素值

2012-4-2

19/42

......

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

2012-4-2

20/42

......

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

2012-4-2

21/42

C语言程序设计-第十一章.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
    ×
    二维码
    × 游客快捷下载通道(下载后可以自由复制和排版)
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
    × 常见问题(客服时间:周一到周五 9:30-18:00)