关于二级指针遍历二维数组,我这样做问题在哪里? 这是啥树呀?它的根是黑色的?

作者&投稿:穆泡 (若有异议请与网页底部的电邮联系)
二维数组是由一维数组组成的数组。它的每个元素都是一个一维数组。因此指向二维数组的指针应该是一个数组指针,数组长度等于每个一维数组的长度。
char (*p1)[3]=board;

关于二级指针和二维数组的问题~

这个问题,如果手把手的教,恐怕才好理解;不过,这里我会尽量给你讲清楚的。

首先,你要分清楚,数组类型,和指针类型,的区别,然后再看二维的

int a[4]; //a 的类型 int [4], 也就是4个元素的数组类型,它是个地址的概念,首地址,即&a[0]
int *pi; // pi 的类型 int*,整型指针,变量 pi 可以存放个地址
pi = a; //或是 pi = &a[0]; 这里的赋值是可以的;
pi[2] = 321; // 等价于*(pi + 2) = 321; 等价于a[2] = 321;

上面是指针和数组的相同,下面是他们的不同:
sizeof(a): 16 ,4 * 4, 4个int元素,每个元素4个字节;
sizeof(pi): 4,它就是个指针,指针变量都是4个字节;
a + i 等效于 pi + i, 他们都相对于a(或是pi)偏移i个int元素的位置;

下面看二维数组:
int a[3][4];
改写下形式,也许,你就懂了 int (a[3])[4];
a[0], a[1], a[2] //他们都是int [4]的类型,都是4个int元素的首地址,你可以画个图
a // 是 int [3] [4]的类型,它是a[0] , a[1], a[2] ,3个元素的首地址,画个图;

a + 1 就是&a[1] , a + 2 就是&a[2];
*(a + 1 ) + 2 就是 a[1] + 2, 也就是 &a[1][2], 于是 *( *(a + 1) + 2) 就是a[1][2];

现在看二维指针和数组指针,
int * * pi; // pi = a;这里的赋值是不可以的,你懂的,类型不一样,除非你强制转换
int (*pj)[4]; // pj = a; 这里赋值是可以的;数组指针

假设int 4个字节,指针也都是4个字节,而且 pj = pi = 0 (地址十进制)
pi + 1 // 地址是 4,偏移了一个int*的元素,
pj + 1 // 地址是 16,偏移了4 * 4个int元素,

如果,这里的你都看懂了,你问的那个问题,已经不成问题了;
//编译通过,访问报错
//printf("%d
",*(*(ar+i)+j));
ar 什么类型? int ** 类型,而不是int [3][4]这种类型,也不是int (*)[4]这种类型,
你希望ai + i 他偏向 第 i 行,实际上他不会,它只会,向后偏 i 个位置

我感觉要说的,差不多了,你要是想理解,要么再看看书,画画图,或是问问其他同学,我这上面的也不可能讲的生动形象;祝你好运~~~

长叶冻绿 又叫山黑子 苦李根 过路黄 长叶鼠李 黄药 它的根有毒 民间常用根 皮煎水或醋浸治顽廯或疥疮

关于二级指针遍历二维数组,我这样做问题在哪里?
答:二维数组是由一维数组组成的数组。它的每个元素都是一个一维数组。因此指向二维数组的指针应该是一个数组指针,数组长度等于每个一维数组的长度。char (*p1)[3]=board;

c语言中如何通过二级指针来操作二维数组
答:1、首先我们打开电脑里的C语言软件,新建一个工程和.c文件,输入头文件和主函数。2、然后我们输入图示代码初始化数组,定义变量类型。3、然后我们输入图示代码用for语句实现数组的访问。4、然后我们输入图示代码进行输出。5、然后我们输入图示代码编译、运行,即可通过二级指针来操作二维数组。

(C#) 如何用二级指针指向二维数组?
答:在C#中,二级指针叫数组的数组,看个例子:int[2][] array;arry[0]=new int[3]{0];arry[1]=new int[4]{0];或则 这么int[][]array = {new int[3]{0],new int[4]{0]};《C#经典入门》有讲解 楼主的意思是非要指针了,虽然指针在C#中不建议用。一般就array[1,2]访问就可以。用...

二维数组和二级指针
答:通过二级指针去访问二维数组需要先给二级指针分配等同于二维数组行数的一维数组指针,然后把二维数组的每行首地址赋值给对应位置的一维指针上。之后就可以通过二维指针直接访问了。参考代码如下,可以看具体注释辅助理解。include <stdio.h>//输入输出头文件。#include <stdlib.h>//本程序需要用到malloc/fre...

实例分析用指针访问二维数组的几种方法
答:所以当我尝试用二级指针去访问二维数组时,就经常会出错。下面就是刚开始写的一个错误的程序:#include <stdio.hintmain(){intiArray[2][3] = {{1,2,3},{4,5,6}};int**pArray = NULL;pArray = iArray;printf("array[0][0] = %d\n", pArray[0][0]);printf("array[1][2] ...

c++的二级指针和二维数组
答:但是二维数组却不能看成是二级指针 就以a[2][3]举例 a[2][3]其实就是两个维度为3的一维数组合并起来的二维数组, 也可以看成是一个一级数组指针 所以并不能用二级指针直接操作二维数组 推荐使用 #include <iostream> void main() { int a[2][3]; int (*p)[3] = a; } 求采纳 ...

怎么让一个二维指针指向一个二维数组
答:楼主,我想讲讲二级指针的原理,它是指向内存地址的地址,简单说就是取两次地址,一维数组,二维数组它们的元素都对应拥有一个暂时分配的内存地址,就是说只需要一个一级指针就可以完成取址,如果你用一个二级指针去取址是会取到乱值,如果是系统的地址系统就会崩溃(我就是试过用指针把编译器搞崩溃了...

c++二维数组和二级指针
答:类型不匹配,a 不是 int ** 类型的 ,虽然一维数组的数组名是一个指针 ,但是二维数组却不同 ,因为它所指向的东西是有大小的 ,举例来说 ,你这个 a 他是 int[2][3] 类型的 , 编译器需要知道要操作的单元的大小,就是说如果你用 p++; 的话编译器要能知道移动多少个字节,所以说可以改...

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

怎么理解指向二维数组的数组指针是二级指针
答:因为二级指针只能指向存有int*的位置,而数组内部都是int*的元素。所以数组指针就是二级指针。而二维数组不能直接作为二级指针。它是一维指针数组int (*ab)[]。这个指针数组解释就是首先是一个指针(*ab),然后是一个数组,存放int元素。可以用这个指针ab去访问,**ab第一个元素;*(*ab)[1]第二...