C将2D数组传递给函数,打印结果

时间:2015-06-02 08:01:41

标签: c function pointers memory-address

我试图通过将2D数组传递给函数来打印它,但是我得到了奇怪的结果。这是我的代码。

#include <stdio.h>

int main()
{
    int b[2][3] = {{1,2,3},{4,5,6}};
    printArray(b);
    return 0;
}

void printArray(int (*ptr)[3])
{
    int i, j;
    for(i = 0; i < 2; i++)
    {
        for(j = 0; j < 3; j++)
        {
            printf("%d\t", *((*ptr+i)+j));
        }
        printf("\n");
    }
}

然而,输出是

1  2   3

2  3   4

我认为这与我的&#39; j&#39;变量,但我似乎无法确定它。请帮忙。

4 个答案:

答案 0 :(得分:1)

在添加j ...

之前,你需要将i乘以3
printf("%d\t", *((*ptr+(i*3))+j));

答案 1 :(得分:1)

在使用取消引用运算符之前,您需要应用加法运算符。您需要使用括号,因为解除引用运算符(*)的优先级高于加法运算符(+)。

所以,这个

printf("%d\t", *((*ptr+i)+j));

应该是

printf("%d\t", *((*(ptr+i))+j));

或更好

printf("%d\t", ptr[i][j]);

此外,您需要在printArray之前移动函数main或在main之前提供函数原型,如:

void printArray(int (*ptr)[3]);

答案 2 :(得分:0)

放弃索引以支持指针,假设矩阵按行存储(通常就是这种情况):

OLD

输出:

#include <stdio.h>

void printArray(int *);

int main()
{
 int b[2][3] = {{1,2,3},{4,5,6}};
 printArray((int*)b);
 return 0;
}

void printArray(int *ptr)
{
int i, j;
 for(i = 0; i < 2; i++)
 {
    for(j = 0; j < 3; j++)
    {
     printf("%d\t", *ptr++);
    }
  printf("\n");
 }
}

答案 3 :(得分:0)

Layout.maximumWidth: parent.width 可以使用printArray nb_column参数并处理所有类型的2D数组

nb_line