当天的问候
我是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.
答案 0 :(得分:1)
对于一个完整的初学者来说,我正在考虑您要传递多维数组,您还需要在参数中提及边界。
注意:-内边界不是必需的,但外边界是必要的!
在上述情况下
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");
}
}
的更多信息
答案 1 :(得分:0)
arr
(int [3][3]
)的类型与ptr
(int []
)不匹配。要使此工作有效,您要么必须更改ptr
的类型:
void display( int ptr[][3], int n, int nt )
{
...
}
或者您将需要假装arr
是一维数组-您可以通过显式传递第一个元素的地址来做到这一点:
display( &arr[0][0], 3, 3 );
,然后在display
中使用单个下标:
printf( "%d", ptr[i * n + j] );