arrays - 打印多维数组的值
问题描述
当天的问候
我是C的初学者。
我正在学习C。
我正在解决二维数组的问题。
问题是我必须获取多维数组的值并打印它们。
打印方式应该是这样的:
2 3
4 5
6 7
/*
Array is like-
{
{2,3},
{4,5},
{6,7}
}
*/
所以我认为你的问题已经清楚了。
我的代码给了我很多错误
#include <stdio.h>
void display(int ptr[] ,int n,int nt);
int main(){
int arr[3][2];
for(int i=0 ; i<3 ; i++){
for(int j=0 ; j<2 ; j++){
scanf("%d", &arr[i][j]);
}
}
display(arr,3,2);
return 0;
}
void display(int ptr[],int n,int nt){
for(int i=0 ; i<n ; i++){
for(int j=0 ; j<nt ; j++){
printf("%d", ptr[i][j]);
}
printf("\n");
}
}
我的错误
/storage/emulated/0/C/Practice/Arrays/multidimensional arrays/quick_quic.c:19:10: warning:
incompatible pointer types passing 'int [3][3]'
to parameter of type 'int *'
[-Wincompatible-pointer-types]
display(arr,3,3);
^~~
/storage/emulated/0/C/Practice/Arrays/multidimensional arrays/quick_quic.c:4:18: note:
passing argument to parameter 'ptr' here
void display(int ptr[] ,int n,int nt);
^
/storage/emulated/0/C/Practice/Arrays/multidimensional arrays/quick_quic.c:29:23: error:
subscripted value is not an array, pointer, or
vector
printf("%d", ptr[i][j]);
~~~~~~^~
1 warning and 1 error generated.
解决方案
对于我正在考虑的完整初学者来说,您要传递多维数组,您还需要在参数中提及界限。
注意:- 内界不是必需的,但外界是!
在上述情况下
void display(int ptr[][3] ,int n,int nt);
在定义函数时也是如此
void display(int ptr[][3],int n,int nt){
for(int i=0 ; i<n ; i++){
for(int j=0 ; j<nt ; j++){
printf("%d", ptr[i][j]);
}
printf("\n");
}
}
所以上面的正确程序是
#include <stdio.h>
void display(int ptr[][3],int n,int nt);
int main(){
int arr[3][3];
for(int i=0 ; i<3 ; i++){
for(int j=0 ; j<3 ; j++){
scanf("%d", &arr[i][j]);
}
}
display(arr,3,3);
return 0;
}
void display(int ptr[][3],int n,int nt){
for(int i=0 ; i<n ; i++){
for(int j=0 ; j<nt ; j++){
printf("%d", ptr[i][j]);
}
printf("\n");
}
}
如果您进一步学习,您也可以随时使用指针或引用调用,您也会学习!
编辑:
使用指针
#include <stdio.h>
void display(int *ptr,int n,int nt);
int main(){
int arr[3][3];
for(int i=0 ; i<3 ; i++){
for(int j=0 ; j<3 ; j++){
scanf("%d", &arr[i][j]);
}
}
//passing the pointer to first element
display(&arr[0][0],3,3);
return 0;
}
void display(int *ptr,int n,int nt){
for(int i=0 ; i<n ; i++){
for(int j=0 ; j<nt ; j++){
printf("%d",*((ptr+i*n)+j));
}
printf("\n");
}
}
在此处查看有关指向数组的指针的更多信息
推荐阅读
- html - 一个有效的 HTML 自定义元素可能包含两个连字符或破折号,例如。
? - java - PDFBox:ExtractImages JPEG2000 图像未提取
- go - 性能提高几乎线性增加 GOMAXPROCS 从 1 到 4 但随后有点平
- django - 推荐的 Git 编辑器 - Nano 或 Visual Studio 代码
- html - Angular / Select / formControl / 默认值
- vue.js - 多角色Vuejs项目结构
- javascript - React 路由器导致无效的钩子调用
- c++ - 除了删除派生类中动态分配的内存之外,是否有使用纯虚拟析构函数的理由?
- python - 具有复杂条件的 json 模式的 Json Schema
- c++ - 字符和外文字母 c++ throws Debug Assertion Failed