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

来源:互联网 发布:斯拉夫人知乎 编辑:程序博客网 时间:2024/05/30 04:03
#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.