如何解决打印多维数组的值
当天的问候
我是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 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);
^~~
/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 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 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 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],ptr[i][j]);
}
printf("\n");
}
}
如果您继续学习,也可以始终使用指针或通过引用调用!
编辑:
使用指针
#include <stdio.h>
void display(int *ptr,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);
return 0;
}
void display(int *ptr,int nt){
for(int i=0 ; i<n ; i++){
for(int j=0 ; j<nt ; j++){
printf("%d",*((ptr+i*n)+j));
}
printf("\n");
}
}
的更多信息
,
arr
(int [3][3]
)的类型与ptr
(int []
)不匹配。要使此工作有效,您要么必须更改ptr
的类型:
void display( int ptr[][3],int nt )
{
...
}
或者您将需要假装arr
是一维数组-您可以通过显式传递第一个元素的地址来做到这一点:
display( &arr[0][0],3 );
,然后在display
中使用单个下标:
printf( "%d",ptr[i * n + j] );
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。