指针和变量的关系
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2)用指针变量引用数组元素 int a[10],*p; p=a; *(p+0) 即 a[0] *(p+k) 即 a[k] 3)指针带下标 p[k]与a[k]、*(a+k)、*(p+k)ቤተ መጻሕፍቲ ባይዱ价 都指a数组第k个元素
main( ) { int a[10]; int i; for(i=0;i<10;i++) scanf(“%d”,&a[i]); printf(“\n”); for(i=0;i<10;i++) printf(“%d”,a[i]); }
用指针变量指向数组元素 main( ) { int a[10],*p,i; for(i=0;i<10;i++) scanf(“%d”,a+i); printf(“\n”); for(p=a;p<(a+10);p++) printf(“%d”,*p); }
10.2 指针数组和数组指针
(1)指向一维数组的指针(数组指针) 比如:int (*ptr)[2]; /*定义ptr是指 向两个元素组成的一维数组的指针变量*/ (2)指针数组 比如:int *q[3]; /*定义三个指针变量 组成的数组*/ 10.3 二维数组和指针 (1)二维数组看作一维数组组成的一维数组
指向数组的指针
10.1 指向一维数组的指针 所谓数组的指针是指数组的起始地址 数组元素的指针是数组元素的地址 (1)指向数组元素的指针变量的定义与赋值 比如: int a[10]; int *p; 指针的基类型要与数组元素的类型相同 对指针赋值: p=&a[0]; p 1
3 5 7 9 11 13 15 17 19
找出其规律:
(1)第0列和对角线上 的元素都为1 (2)除第0列和对角线 上的元素外,其他元 素的值均为前一行上 元素和前一个元素之 1和
6 1
1
1
4
5
6
10
4
10
1
5
1
6
15
20
15
(4)打印一个9x9乘法表(见课本p146
10.4)
数据结构 :a[9][9]
规律:第0行第0列上元素均为其行号或列号 加1,其他任一元素为其所对应行和列上第0 个元素的乘积
C语言规定数组名代表数组的首地址,也就 是第一个元素的地址。因此,以下两语句等 价: p=&a[0]; p=a; /*把a数组首地址赋给指针变量p*/ 在定义时可以赋值: int *p=&a[0]; 等价于: int *p; p=&a[0];
(2)通过数组名和指针引用数组元素 1)用数组名(即数组首地址)引用数组元素 *(a+k) 即 a[k] 比如:for(k=0;k<10;k++) printf(“%d”,*(a+k)); a+k就是a[k]的地址,或者说它指向a数 组第k个元素
(2)建立指针数组和数组指针来引用指向二 维数组
1)指针数组
比如:int *p[3],a[3][2],i;
for(i=0;i<3;i++) 2)数组指针
p[i]=a[i];
比如:int (*ptr)[2],a[3][2];
ptr=a;
3)应用 用指针数组和一维数组a建 立一个3x2的二维数组,a数组已赋初 值2、4、……。按行顺序输出此二维 数组,然后按列的顺序输出。
a[0]可表示为
则a[0][0]可表示为
*(a+0)
*(*(a+0)+0)
即:a[i][j]可表示为
*(*(a+i)+j)
故二维数组的元素a[i][j]可有以下几种表示 方法: 1) a[i][j] 2)*(a[i]+j) 3)*(*(a+i)+j) 4)(*(a+i))[j] 5)*(&a[0][0]+列数*i+j)
10.4二维数组和指针的应用 (1)求两个矩阵相加(将两个同样大小的 矩阵相同位置上的元素相加) (2)执行下面语句后,表达式
*(p[0]+1)+**(q+2)的值为:
int a[ ]={5,4,3,2,1},
*p[ ]={a+3,a+2,a+1,a},
**p=q;
(3)打印杨辉三角 1 1 1 1 1 2 3 1 3 1
int a[2][3]; 则 a数组有两个元素:a[0] a是这两个元素的首地址 a[0] a[1] a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] 则a是指向指针 a[0]是这三个元素的首地址 a[1]
a[1]是这三个元素的首地址
故:a[0]、a[1]是指针常量 常量的指针常量