C语言中怎样区分一维指针和二维指针?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中怎样区分一维指针和二维指针?相关的知识,希望对你有一定的参考价值。

指针没有一维二维的说法。
如果是指向数组的指针变量,通过 p+1 跳过的字节数,可以进行判断,前提是你要知道指针变量指向的数组的规模,即几行几列。
参考技术A 指针就是指针没有维数。
指针指向的数据可以有维数,不知楼主是否问的这个意思?
比如有多维数组,就可以有多维数组的指针。
例子:
int (*ptr)[3][3]; int (*ptr1)[3];
则定义了两个指针,ptr指向一个[3][3]二维int型数组,ptr1指向一个int型一维数组。

如何利用memcpy将二维指针复制给一维指针?

int *tmp1;
int **tmp2;
int *tmp3;
tmp1 = new int[3*4];
tmp2 = new int *[3];
for (int i=0; i<3; i++)

tmp2[i] = new int[4];

for (int i=0; i<3; i++)

for (int j=0; j<4;j++)

tmp2[i][j]=i*4+j;


memcpy(tmp1,tmp2,3*4*sizeof(int))

代码可以运行,但是tmp1没有被赋值,请问:如何将二维指针tmp2通过memcpy函数复制给一维指针tmp1?
非常感谢~

很简单啊,就跟你分配空间的顺序一样啊:

for (int i=0; i<3; ++i)

    memcpy( tmp1 + (i*4), tmp2[i], 4*sizeof(int) );

这样就可以了,注意把指针的位置找对就好。

参考技术A 原来是这种二级指针而不是二维数组……
弄个循环(是一个),计算好位置,然后一次一次复制

for(int i = 0; i < 3; ++i)
memcpy(&tmp1[i*4], tmp2[i], 4 * sizeof(int));

以上是关于C语言中怎样区分一维指针和二维指针?的主要内容,如果未能解决你的问题,请参考以下文章

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

c语言中如何通过二级指针来操作二维数组

C语言中关于二维数据指针的问题?

C 语言二级指针作为输入 ( 自定义二级指针内存 | 为 二级指针 分配内存 - 存放 一维指针 | 为每个 一级指针 分配内存 | 释放二维指针内存 )

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

C语言 如何定义一个二维指针数组?