C语言中的二维数组名是一个二重指针吗? C语言里指向二维数组的指针是不是相当于一个二维指针?

作者&投稿:端木可 (若有异议请与网页底部的电邮联系)
不是

二级指针p也可以解释为指针的指针,即p内保存的值实际上还是一个指针,计算:
*p的值实际上是一个指针值,那么 *(*p)即二级指针指向的最终值

对于二维数组a[2][2],a也是一个地址,并且这个值也等于a[0],也等于a[0[0]的地址,即&a[0][0],由此看来对a取地址的值是一个变量值(不是指针),所以a并不是一个二级指针,最多算一个一级指针。

1、二维数组名不是二级指针,它只是一个比较特殊的常量指针。包括三维,四维,乃至N维数组也是如此。只要是数组,那么它就是一个普通的常量指针。
2、二级指针p也可以解释为指针的指针,即p内保存的值实际上还是一个指针,计算:
*p的值实际上是一个指针值,那么 *(*p)即二级指针指向的最终值。
对于二维数组a[2][2],a也是一个地址,并且这个值也等于a[0],也等于a[0[0]的地址,即&a[0][0],由此看来对a取地址的值是一个变量值(不是指针),所以a并不是一个二级指针,最多算一个一级指针。

应该不是的,简单来说,数组名,不管是多少维度的都是采用名称代码表相应的存放地址。虽然二重指针也是存放数据的地址但是其是间接的存放。就打个比方,二重指针就如一个厂家有好多货要卖出去。而自己又没有销售渠道,只好通过代理商来提货,通过分销商来卖给消费者;二维数组就如厂家有货而且自己有渠道直接销往消费者。 不知这样说是否容易理解。

C语言中二维数组名能否直接赋给指针变量~

二维数组的指针与指针的指针是不一样的。
所以
int **ppr;
int fool[2][3];

ppr = fool;
这样是不行的。
二维数组的指针必须限定第一维的大小。
所以:
int (*ppr)[3];

ppr = fool;
这样才可以。

指向二维数组的
可以是一维指针, 可以是一维指针数组,可以是一维数组指针,也可以是二维数组指针。
其中, 一维指针数组,和一维数组指针这两个,是相当于二维指针, 但只是级别上相当,也不能完全等同。

C语言中的二维数组名是一个二重指针吗?
答:对于二维数组a[2][2],a也是一个地址,并且这个值也等于a[0],也等于a[0[0]的地址,即&a[0][0],由此看来对a取地址的值是一个变量值(不是指针),所以a并不是一个二级指针,最多算一个一级指针。

C++二维数组名指的是数组的首地址吗?
答:2、那么二维数组名是否代表二维数组的首地址呢?答案是肯定的,因为二维数组的本质是一维数组,它在内存中的存储也是按照一维数组的方式存储的。所以数组名始终代表数组的首地址。3、我们可以编程取地址确认是否正确.答案输出yes。int main(){ int arr[4][4] = {0};if(arr == &arr[0][0])print...

...B选项说a是指向指针的指针?a不就是一个二维数组吗?哪里看出他是指针...
答:二维数组没错,指向指针的指针也没错。数组名可以作为一个“常指针”使用,二维数组名当常指针使用时就是一个二重指针,第一重是指向下标为[0][0]的元素的,第二重是指向[0]这一行的。

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

二重指针 二维数组函数传递问题 求c/c++大佬相助 谢谢大佬们 c语言...
答:规定若是将二维数组作为实参传递给函数,那么在函数的参数声明中必须显示地指明数组的列数,因此可以改为如下:将int mColoring(int n, int m, int** a) 改为int mColoring(int n, int m, int (*a)[4]),或者直接就写为int mColoring(int n, int m, int a[4][4]),亦或者int m...

c语言中二维数组(*a)[1]和*a[1]有什么区别,为啥他们的值不一样?_百度...
答:二维数组名是一个指向一个一维数组的指针,a是一个二维数组名,就是一个指向一维数组的指针,一个这样的指针求间接运输(*a),得带的是这个指针所指向的一维数组的数组名,在此是 a[0], 数组名加一个下标就是数组元素值,(*a)[1]就是 第0行数组的第1个元素 a[0][1]-->2 a[1]->...

二维数组名为什么不能直接赋值给二重指针
答:因为二维数组名的类型不是二重指针 比如 int a[3][5];int (*p)[5] ;然后p=a这样才是正确的 如果只是int **p就不对了

c++二重指针
答:首先要了解二重指针就是指向指针的指针,本身存储的是一个指针的内存地址,比较简单的就是指向二维数组。比如用malloc动态分配一个3*4大小的二维数组,int** p = (int **)malloc( 3 * 4 * sizeof(int) );至于其他用法你可以看下面的文章。参考资料:http://blog.csdn.net/sdfgh2046/article/...

如果形参为二重指针时,调用此函数时实参该怎么写呢
答:你这里有一个小小的误区,不是所有的二维数组都能很简单的转成二重指针的。如果你的实参是普通的二维int arr[8][8],那么你把你的形参也可以写成int [8][8];写成int**类型会出其他的错误,如果写成int*也是可以达到目的。如果你的实参是int* arr[]这种二维,那么形参就写成int**。不清楚就追问...

如一个二维数组int a[3][4];int *p;有人说p=a;
答:3维数组在内存里面还是线性存储的 a[0][0]a[0][1]a[0][2]……所以 a,a[0],a[0][0]都是相等的!给个程序你看看 include "stdio.h"include "conio.h"main(){ int a[2][2]={1,2,3,4};printf("%d\n",a);printf("%d\n",a[0]);printf("%d\n",&a[0][0]);getch(...