赞
踩
1.什么是指针数组
指针数组是一个数组,是用于存放指针的,即将指针(所指向的内存地址)作为数组元素的类型,存入的元素为变量或者是常量。
指针数组存放的是很多指针的集合
2.定义一个指针数组
格式:数据类型 *指针名 [数组大小]
例:int *p[5] 长度为5的数组里面存放了5个类型为int* 类型的指针。(如果存入的是字符串常量,则为该常量对应的首地址)
这里可以看到,数组p中存放的是就是变量a、b、c的指针(即地址值),对其解引用当然也可以得到其相应的值。
1.什么是数组指针
数组指针首先是一个指针,是一个指向数组的指针,可以存放数组的地址。
那么什么是数组的地址呢?
int arr[5]={1,2,3,4,5}
arr-数组首元素的地址
&arr[0]-数组首元素的地址
&arr-数组的地址
即一个数组指针存放的是&arr的地址。
2.定义一个数组指针
数据类型(*指针名)[数大小]
例: int (*p)[5] 定义一个int类型的大小为5的数组指针
- int main() {
- int arr[5] = { 10,20,30,40,50 };
-
- int(*p)[5];
- p = &arr;
- printf("%p\n",arr);//arr首元素的地址值
- printf("%p\n",&arr[0]);//arr[0]的地址值
- printf("%p\n",arr[0]);//第一个元素10所对应的地址值
- printf("%p\n",p);//p指针的地址值,
- printf("%p\n",*p);//*p即arr本身的地址值
- printf("%p\n", *p[0]);//*p对应arr,*p[0]对应arr[0]第一个元素10的地址值
- printf("%d\n", (*p)[0]);//指针p第一个元素的值,即arr[0]的值
- int* pa;
- pa = &((*p)[0]);
- printf("%d",*pa);//用指针变量pa接收arr[0]的地址,在解引用验证是否正确
- return 0;
- }
指针p存放的是数组arr的地址,p就是数组指针。
编写程序,利用指向数组的指针求 3 * 5 数组各行元素之和。
- #include<stdio.h>
- #define N 3
- #define M 5
- int main()
- {
- int a[N][M];
- int (*p)[M] = a;
- int i,j,sum;
- /********** Begin *********/
- for(i=0;i<N;i++){
- sum=0;
- for(j=0;j<M;j++){
- scanf("%d ",*(p+i)+j);
- // printf("%d ",*(*(p+i)+j));
- sum+=*(*(p+i)+j);
- }
- printf("第%d行和为:%d\n",i,sum);
- }
- /********** End **********/
- return 0;
- }
测试输入:54 21 36 58 4 78 46 2 35 47 69 28 91 51 32
结果显示:
编写程序,利用指针数组求 3 * 5 数组各行元素之和。
- #include<stdio.h>
- #define N 3
- #define M 5
- int main()
- {
- int a[N][M];
- int *p[N] ;
- int sum;
- for(i=0;i<N;i++)
- {
- for(p[i] = a[i] ; p[i] < a[i]+M ; p[i]++)
- {
- scanf("%d",p[i]);
- }
- }
- /********** Begin *********/
- for(i=0;i<N;i++)
- { sum=0;
- for(p[i] = a[i] ; p[i] < a[i]+M ; p[i]++)
- {
- // printf("%d ",*p[i]);
- sum+=*p[i];
- }
- printf("第%d行和为:%d\n",i,sum);
- }
-
- /********** End **********/
- return 0;
- }
测试输入:54 21 36 58 4 78 46 2 35 47 69 28 91 51 32
输出结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。