C将二维数组传递给函数,打印结果
C passing 2D array to function, printing results
我试图通过将二维数组传递给函数来打印它,但我得到了奇怪的结果。这是我的代码。
#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
我认为这与我的 'j' 变量有关,但我似乎无法查明它。请帮忙
您需要先将 i 乘以 3,然后再添加 j ...
printf("%d\t", *((*ptr+(i*3))+j));
您需要在使用解引用运算符之前应用加法运算符。您需要使用括号,因为解引用运算符 (*
) 的优先级高于加法运算符 (+
).
所以,这个
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]);
放弃索引转而使用指针,假设矩阵按行存储(通常是这种情况):
#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");
}
}
输出:
1 2 3
4 5 6
printArray
可以接受 nb_column
nb_line
参数并处理各种二维数组
#include <stdio.h>
static void printArray(int *ptr, int nb_columns, int nb_lines)
{
int i, j;
for(i = 0; i < nb_lines; i++)
{
for(j = 0; j < nb_columns; j++)
{
printf("%d\t", *(ptr++));
}
printf("\n");
}
}
int main()
{
int b[2][3] = {{1,2,3},{4,5,6}};
printArray((int *)b, 3, 2);
return 0;
}
我试图通过将二维数组传递给函数来打印它,但我得到了奇怪的结果。这是我的代码。
#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
我认为这与我的 'j' 变量有关,但我似乎无法查明它。请帮忙
您需要先将 i 乘以 3,然后再添加 j ...
printf("%d\t", *((*ptr+(i*3))+j));
您需要在使用解引用运算符之前应用加法运算符。您需要使用括号,因为解引用运算符 (*
) 的优先级高于加法运算符 (+
).
所以,这个
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]);
放弃索引转而使用指针,假设矩阵按行存储(通常是这种情况):
#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");
}
}
输出:
1 2 3
4 5 6
printArray
可以接受 nb_column
nb_line
参数并处理各种二维数组
#include <stdio.h>
static void printArray(int *ptr, int nb_columns, int nb_lines)
{
int i, j;
for(i = 0; i < nb_lines; i++)
{
for(j = 0; j < nb_columns; j++)
{
printf("%d\t", *(ptr++));
}
printf("\n");
}
}
int main()
{
int b[2][3] = {{1,2,3},{4,5,6}};
printArray((int *)b, 3, 2);
return 0;
}