二维数组与双重指针

Posted alei777

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二维数组与双重指针相关的知识,希望对你有一定的参考价值。

一、二维数组

int array[10][10];
函数声明: void fun(int a[][10])
函数调用:fun(array);
访问: 一般使用a[i][j]来访问数组中的元素

二、指针数组

 int *array[10];
 函数声明:void fun(int *a[10]);
 函数调用:fun(array);
 访问:使用*(a[i]+j)访问数组中的元素

三、指向指针的指针

int **array;

函数声明:void fun(int **a);

函数调用:fun(array);

访问:*(*(a+i) + j) 或者a[i][j]?访问元素(使用双重指针表示的二维数组的访问方法)

注意:char **p和char p[2][3]之间不能互相传递参数,因为它们具体的内存分配不一样,这样在运行时就会出现端错误。

还需要注意:

二维数组中的a[i][j]和双重指针中的a[i][j]意思是不一样的。

二维数组中的int a[10][10],a[i][j]指的是第i行第j列等元素。

双重指针int **a中,a[i][j]指的是存放在int *指针所指向地址中的第j个元素。也就是*(*(a+i)+j)。

 

简而言之char **和char *c[10]的内存分配是相同的,而char **和char [10][10]的内存分配是不同的。

char[10][10]是

技术图片

 

 

一段连续的地址。

而char **c的内存分配是:

技术图片

 







以上是关于二维数组与双重指针的主要内容,如果未能解决你的问题,请参考以下文章

c语言中怎样实现对二维数组元素进行赋值并输出。

C语言指针指向一维数组与二维数组?

一个关于C语言的指针与二维数组的问题

C语言中二维数组行指针是啥

C语言中二维数组名是否可以看作指针数组名?

memcpy()对二维数组和二维指针操作的区别