网上有关“数组指针赋值”话题很是火热,小编也是针对数组指针赋值寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。
int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
int (* p)[3] ;
p = &a[0];
首先解释一下int (* p)[3] ;指向数组的指针,首先它是一个指针,只是一个,它用指向一个数组,该数组有3个元素,这个是比较通俗的说法了。
你的a[2][3]就是
1 2 3
4 5 6
而p = &a[0];表示p指向的是第一行的1 2 3,就代表p[0]=1,p[1]=2,p[2]=3
不是
(*p)[0] = &a[0]
(*p)[1] = &a[1]
(*p)[2] = &a[2]的意思 而且a[2]的地址都跑到末尾了,里面都么有东东了,这个2,3界限不好说。我说一个
int a[2][10000]{{1,2,3},{4,5,6}};
int (*p)[1000];
p=&a[0];
一、二维数组与二级指针
二维数组
二维数组本质上是以数组作为数组元素的数组,即“数组的数组”。二维数组的相当于由若干个一维数组组成的一级数组。
int a[3][4];
此时的a是一个二维数组,a[0]、a[1]、a[2]均表示一个一维数组,它们三个元素共同组成一个一维数组a(元素是一维数组)。也就是说二维数组a是由若干个一维数组元素(a[0]、a[1]、a[2])组成的一维数组。
int a[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}}
设数组a的首地址为1000,各下标变量的首地址及其值如图所示。
无论是一维数组还是二维数组,数组名均表示数组的首地址。
2. 二级指针
指向指针的指针称为二级指针,即二级指针不是指向一个普通变量,而是指向一个指针。如int **p,*p并不表示一个变量的值,而是另一个指针。
二、二级指针指向二维数组
int a[3][4];
此时的a即是一个二级指针,*a指向二维数组的首地址(也是a[0]的首地址),*(a+1)指向a[1]的首地址,*(a+2)指向a[2]的首地址。*(*(a+0) + 1)表示元素a[0][1],*(*(a+i)+j)表示元素a[i][j]。
三、应用举例
#include?<stdio.h>void?main()
{
int?a[3][4]?=?{{0,?1,?2,?3},?{4,?5,?6,?7},?{8,?9,?10,?11}};
for(int?i=0;?i<3;?i++)
{
for(int?j=0;?j<4;?j++)
{
printf("%4d",?*(*(a?+?i)?+?j));
}
printf("\n");
}
}
四、运行测试
01?2?34?5?67
89?10?11
关于“数组指针赋值”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!
评论列表(3条)
我是沃格号的签约作者“昌名轩”
本文概览:网上有关“数组指针赋值”话题很是火热,小编也是针对数组指针赋值寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。int a[2][3] =...
文章不错《数组指针赋值》内容很有帮助