无法使用指针打印 2D 矩阵的值
Can't print values of a 2d matrix using pointers
我在使用指针时遇到了一些麻烦。我试图填补这个二维矩阵,但我不能打印他们的值。你能看一看给我提示吗?
#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");
}
谢谢。
当你用
创建一个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);
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");
}
尝试将打印语句更改为:
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);
你可以这样创建你的write函数:
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);
关于指针和数组有一个重要的方面:-
One dimension --- a[i] = *(a+i)
Two dimension --- a[i][j] = *(*(a+i)+j) and so on...
都是等价的....所以现在我相信你可以找出问题是什么:-)
相关文章:
- 打印第二列时的2d字符矢量打印空间
- 库特<<恩德尔;不适用于打印 2D 阵列
- 直接 2D 呈现到命令列表和打印:图片压缩
- 如何打印 2D 字符数组C++
- 在C++中初始化和打印 2D 数组
- 打印 2D 动态数组 c++ 函数
- 我无法打印 2D 矢量
- C++ 如何创建 2D 数组,将其传递给另一个函数,然后打印
- 如何在 2D 字符数组中打印 [x][y] 元素的地址?(C++)
- 2D数组值像数组一样传递,0不打印
- 如何在GDB中按行打印2D数组
- C++ 通过函数打印出 2D 数组
- 使用 auto 打印 2D 矢量的内容
- 如何在C 中打印一个对象的2D向量
- 为什么代码无法打印此 2D 数组的元素?
- 有没有办法更快地打印2D阵列
- cout 用于仅打印最后一行的 2D 字符串矢量
- 从文本文件打印 sfml 中的 2D 数组
- 试图打印出/加载2D数组时的分割故障
- 简单的2D数组标头文件,打印失败