c++中怎么通过指向二维数组的指针给二维数组赋值 c++如何用指针指向二维数组

作者&投稿:展便 (若有异议请与网页底部的电邮联系)

一、二维数组与二级指针

  1. 二维数组

二维数组本质上是以数组作为数组元素的数组,即“数组的数组”。二维数组的相当于由若干个一维数组组成的一级数组。

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("
");
}
}


四、运行测试

   0   1  2  3
   4  5  6   7
   8   9  10  11


C++二维数组如何赋值给指针~

int a[3][4]={1,3,5,6,7,8,44,55,66,132,345,1234};
int *p,i,j;
int k;
cout<<"please enter num:";
cin>>i>>j;
p=&a[0][0];
for (k=0;k< 3*4 ;k++) cout << *(p+k) << " " << endl; // 若 输出所有元素
若 i,j 是行号列号(未超界):
cout << *(p+i*4+j) <<endl; //输出 a[i][j]

不能用二维指针指向二维数组,指向二维数组的指针最后一维必须是确定的。
int
a[4][4]={1,2,3,4,2,3,4,5,3,4,5,6,4,5,6,7};
int
(*s)[4];
//表明s指向一个n*4的数组
s=a;
还有一种方法是将二维数组看成是一维数组(因为数组在内存中连续存储)
int
a[4][4]={1,2,3,4,2,3,4,5,3,4,5,6,4,5,6,7};
int
*s;
s=&a[0][0];
这样可以用s[x*y]来表示a[x][y];

c语言里面怎么用指针表示二维字符数组
答:二维数组就是数组的数组,二维数组即数组的元素是一维数组的数组。那么我们要用指针指向二维数组,就是要定义一个指向数组的指针了。例如:char str[3][10]; //定义了一个char型的二维数组char (*pstr)[10]; //定义了一个指向char型的数组指针pstr=str; //指针指向二维数组str下面用pstr这个指针...

请问C语言中指向二维指针数组的指针该怎么表示?
答:整形一位数组:int a[2]; int * p =a; p[n] = 10;整形二维数组:int a[2][3]; int **p=a; p[n][m] = 10;指针二维数组:(把int换成char *) char * a[2][3]; char ***p=a; p[n][m] = &a1;

...动态数组为什么要由指针指向声明,还有指针怎么指向二维数组的...
答://因为创建动态数组是没有标识符的,所以使用指针来访问内存地址里的数据:int *p = new int[10];//使用指针指向二维数据的元素 int ia[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };int (*p)[4] = ia; //p是一个指向含有4个元素的数组指针 int *q = *p; /...

C中指针如何指向二维数组?
答:我觉得应该是有问题的,二维数组的数组名可以相当于指针的地址,a[0]才是这个维数组的地址,而a相当于存放了两个元素的一维数组,但这两个元素是a[0]和a[1],所以这两个元素是地址,所以a是地址的地址 希望你能够明白,你能明白比你积分更珍贵,加油!

如何在c语言二维数组中使用指针
答:程序中有些问题:1、函数的定义有错误(参数格式不对);2、程序中没有调用函数(或者说是调用格式有误)3、函数中的处理逻辑需要修改(一步一步来,这样容易处理和理解)。你定义的函数是使用数组作为参数的,数组名本身就是个地址(相当于指针)。下面在手机上用易历知食软件里的微C程序设计来演示...

c++如何用指针指向二维数组
答:不能用二维指针指向二维数组,指向二维数组的指针最后一维必须是确定的。int a[4][4]={1,2,3,4,2,3,4,5,3,4,5,6,4,5,6,7};int (*s)[4];//表明s指向一个n*4的数组 s=a;还有一种方法是将二维数组看成是一维数组(因为数组在内存中连续存储)int a[4][4]={1,2,3,4,2,3...

c语言中二维数组的指针如何表示
答:比如定义一个int型的二维数组,如下:int **p;或者 int p[MAX_ROW][MAX_LINE];不同的是前者定义了一个int型二维数组的指针,编写器知道该指针的移动方式以int为单位,但此时该指针为NULL,即没有与内存中的物理单元进行对应。使用指针前需要用malloc()为该指针分配一段内存空间,内存空间的大小在...

C语言中关于用指针指向二维数组
答:运行下这个,你就明白了 include <stdio.h> void main(){ int a[5][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{4,4,4,4,4},{5,5,5,5,5}};int *p;p=a[0];printf("p=%d\n",p);printf("p+1=%d\n",p+1);printf("*(p+1)=%d\n",*(p+1));/...

用指向数组元素的指针访问二维数组
答:比如整型二维数组,先定义int p 然后 根据行数,申请和行数相同的int 指针 每个指针指向二维数组对应行。这样就可以通过每行的首地址,访问该行所有元素了。

C语言指针指向一维数组与二维数组?
答:3和2是一样的,也是会报错的。可以使用行指针double (*p)[3]=data;指向数组第0行,也就是我们平常理解的第一行。访问方式,假设data是i行j列,*(*(p+i)+j)就是第i行j列的元素值,也就是data[i][j]的值。也可以使用列指针double *p = data[0]指向第0行0列,访问方式如下:...