您的位置:首页 > 编程语言 > C语言/C++

10、C语言中指向由M个元素组成的一维数组的指针。

2013-06-06 18:11 204 查看
#include <stdio.h>
#include <stdlib.h>

int main()
{
int arr1[4]={32,75,2,10},i=0,j=0;
int arr2[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};//相当于3个一维数组组成
int *p1[4];//普通的指针数组。
int (*p2)[4];//指向由4个元素组成的一维数组的"指针变量" []比*优先级别高
//p1=arr1;//警告提示 不兼容的指针类型 arr<<==>> &a[0];
//p1=&arr1;//同样无效  可以使用p1[0]=arr1;
p2=arr2;//这一类的指针只能这样赋值,使用如同二维数组名,不过可以自增自减,可左值。相当于&arr[0] 第0行地址
for(i=0;i<3;i++,p2++)//这里使用了p2自动切换到下一行,所以不需要p2+i定位到下一行。
{
printf("第%d行的首地址(相当于&arr2[%d]):p=%d\n",i,i,p2);
for(j=0;j<4;j++)
{                                                            //等同*(p2+0)+j
printf("元素arr2[%d][%d]的首地址:&arr2[%d][%d]=%d\n",i,j,i,j,*(p2)+j);
printf("元素arr2[%d][%d]的值:arr2[%d][%d]=%d\n",i,j,i,j,*(*(p2)+j));
}

}
return 0;
}


程序运行结果:
第0行的首地址(相当于&arr2[0]):p=2686660
元素arr2[0][0]的首地址:&arr2[0][0]=2686660
元素arr2[0][0]的值:arr2[0][0]=1
元素arr2[0][1]的首地址:&arr2[0][1]=2686664
元素arr2[0][1]的值:arr2[0][1]=2
元素arr2[0][2]的首地址:&arr2[0][2]=2686668
元素arr2[0][2]的值:arr2[0][2]=3
元素arr2[0][3]的首地址:&arr2[0][3]=2686672
元素arr2[0][3]的值:arr2[0][3]=4
第1行的首地址(相当于&arr2[1]):p=2686676
元素arr2[1][0]的首地址:&arr2[1][0]=2686676
元素arr2[1][0]的值:arr2[1][0]=5
元素arr2[1][1]的首地址:&arr2[1][1]=2686680
元素arr2[1][1]的值:arr2[1][1]=6
元素arr2[1][2]的首地址:&arr2[1][2]=2686684
元素arr2[1][2]的值:arr2[1][2]=7
元素arr2[1][3]的首地址:&arr2[1][3]=2686688
元素arr2[1][3]的值:arr2[1][3]=8
第2行的首地址(相当于&arr2[2]):p=2686692
元素arr2[2][0]的首地址:&arr2[2][0]=2686692
元素arr2[2][0]的值:arr2[2][0]=9
元素arr2[2][1]的首地址:&arr2[2][1]=2686696
元素arr2[2][1]的值:arr2[2][1]=10
元素arr2[2][2]的首地址:&arr2[2][2]=2686700
元素arr2[2][2]的值:arr2[2][2]=11
元素arr2[2][3]的首地址:&arr2[2][3]=2686704
元素arr2[2][3]的值:arr2[2][3]=12

Process returned 0 (0x0)   execution time : 0.287 s
Press any key to continue.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: