我在使用指针时遇到了一些麻烦。我试图填写这个2D矩阵,但我不能打印他们的价值..你能看看并给我一个提示。
#include <stdio.h>
#include <stdlib.h>
#define L1 3
#define C1 2
#define L2 4
#define C2 3
void write(int *p, int n_lin, int n_col){
int i,j;
for(i=0;i<n_lin;i++){
for(j=0;j<n_col;j++){
printf("%d",*p[i][j]); // <- Can't make it work :(
}
printf("\n");
}
}
void main(){
int *p=NULL;
int mat1[L1][C1] = {{1,2}, {3,4}, {5,6}};
int mat2[L2][C2] = {{1,2,3}, {4,5,6}, {7,8,9}, {10,11,12}};
printf("Matriz 1:\n");
write(*mat1, L1, C1);
printf("\nMatriz 2:\n");
write(*mat2, L2, C2);
system("pause");
}
感谢。
答案 0 :(得分:2)
使用
创建2D数组时int mat1[L1][L2];
您的mat1
类型为int**
。
因此,您必须更改调用函数的方式:
void write(int **p, int n_lin, int n_col){ // <- changed this
int i,j;
for(i=0;i<n_lin;i++){
for(j=0;j<n_col;j++){
printf("%d",p[i][j]); // <- Changed this! :)
}
printf("\n");
}
}
并用
调用它write(mat1, L1, C1);
答案 1 :(得分:1)
你的for循环应该是:
for(i=0;i<n_lin;i++){
for(j=0;j<n_col;j++){
printf("%d",p[i][j]); // *p[i][j] should be p[i][j]
}
printf("\n");
}
答案 2 :(得分:1)
尝试将print语句更改为:
printf("%d",*( p + i*n_lin + j));
除此之外,还有一些问题。
在功能定义中,尝试使用
void write(int p[][], int n_lin, int n_col){
然后使用,
printf("%d",p[i][j]));
用它调用,
write(mat1, L1, C1);
答案 3 :(得分:1)
你可以像这样创建你的写函数:
template <int n_lin,int n_col>
void write(const int (&p)[n_lin][n_col])
{
int i,j;
for(i=0;i<n_lin;i++) {
for(j=0;j<n_col;j++) {
printf("%d ",p[i][j]);
}
printf("\n");
}
}
然后只需致电
write(mat1);
write(mat2);
答案 4 :(得分:1)
指针和数组有一个重要方面: -
One dimension --- a[i] = *(a+i)
Two dimension --- a[i][j] = *(*(a+i)+j) and so on...
两者都是等价的....所以现在我相信你可以弄清楚问题是什么: - )