我试图通过将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;变量,但我似乎无法确定它。请帮忙。
答案 0 :(得分:1)
在添加j ...
之前,你需要将i乘以3printf("%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