C中使用指针的2D数组操作

C中使用指针的2D数组操作,c,arrays,pointers,2d,C,Arrays,Pointers,2d,假设我有一个函数,它处理一个2D数组,该数组从主函数接收指向2D数组的指针作为其参数 现在,我想修改(假设每个元素添加10个)2D数组的每个元素 int add_10(int *a) { int i, j, b[M][N] = {0}; for(i = 0; i < M; i++) for(j = 0; j < N; j++) b[i][j] = 10 + a[i][j]; } 我感兴趣的是了解如何使用一个指

假设我有一个函数,它处理一个2D数组,该数组从主函数接收指向2D数组的指针作为其参数

现在,我想修改(假设每个元素添加10个)2D数组的每个元素

int add_10(int *a)
{
    int i, j,
        b[M][N] = {0};

    for(i = 0; i < M; i++)
        for(j = 0; j < N; j++)
            b[i][j] = 10 + a[i][j];
}
我感兴趣的是了解如何使用一个指针遍历2D数组,并返回新修改数组的指针

粗结构 假设指针
a
包含2D数组的初始地址

int add_10(int *a)
{
    int i, j,
        b[M][N] = {0};

    for(i = 0; i < M; i++)
        for(j = 0; j < N; j++)
            b[i][j] = 10 + a[i][j];
}
int-add_10(int*a)
{
inti,j,
b[M][N]={0};
对于(i=0;i
int*add_10(const int*dest,
常量int*src,
常量int M,
常数(整数)
{
int*idest=dest;
memmove(dest、src、M*N*sizeof(int));
对于(int i=0;i<(M*N);+i)
*idest++=10;
返回目的地;
}

尝试在堆栈溢出上搜索“2d数组c”。您可能会找到一些答案。这取决于您是有指向数组的指针(
int(*a)[N])
),还是有指向int的指针(
int**
);您必须相应地声明您的函数。不过,在这两种情况下,语法
a[i][j]
是相同的。如果他使用的是二维数组,或指向数组类型的指针,而不是数组数组,则会出现这种情况。@Dave…is
*(*(dest+i)+j)=10+*(*(source+i)+j)更好?我认为这两个版本都是正确的。不,你使用的是一种根本不同的类型。int k[5][5]是25 int的连续块。它不是一个数组数组,没有一个函数可以保证两者都能工作;但是op询问了2d阵列。@Dave所以。。。这更好吗?:)