2017-04-26 88 views
0

hello to stackoverflow community。这将是我在这里寻找帮助后的第一篇文章,我扫描了本网站的很多页面,还有更多网站试图弄清楚我的代码有什么问题。一个小背景 - 这是在c课程介绍中给我的一个任务。我对它和任何其他编程语言没有深入的了解,所以对我来说很简单。我需要编写一个程序,使用我写的两个函数来查找二维数组中的某个单元格与其右侧的邻居之间的总距离。我还需要计算比所有邻居都大的元素数量。这是我拍这个:2d数组错误 - 使指针指向整数而不投射

1)#include <stdio.h> 
2)#define N 4 
3)int is_strong(int matrix[][N], int row, int column); 
4)int Space_rank(int matrix[][N], int row, int column); 
5)int My_abs(int); 
6)int main() 
7){ 
8) int matrix[N][N]; 
9) printf("Please enter a matrix: \n"); 
10) for(int i=0; i<N; i++) 
11) { 
12) for(int j=0; j<N; j++) scanf("%d", &matrix[i][j]); 
13) } 
14) int Strong_Amount=0, Total_Space=0; 
15) for(int i=0; i<N; i++) 
16) { 
17) for(int j=0; j<N; j++) 
18) { 
19)  Strong_Amount+=is_strong(matrix[N][N], i, j); 
20)  Total_Space+=Space_rank(matrix[N][N], i, j); 
21) }} 
22) printf("Strong elements: %d\n Space rank: %d\n", Strong_Amount,Total_Space); 
23) return 0; 
24)} 
25) 
26)int is_strong (int mat[N][N], int row, int column) 
27){ 
28) int Below, Above, Right, Left; 
29) int Subject=mat[row][column]; 
30) Below=mat[row+1][column]; 
31) Above=(row-1!=0)*mat[row-1][column]; 
32) Right=mat[row][column+1]; 
33) Left=(column-1!=0)*mat[row][column-1]; 
34) int Answer=(Subject>Above && Subject>Below && Subject>Right && Subject>Left); 
35) return Answer; 
36)} 
37) 
38)int Space_rank(int mat[N][N], int row, int column) 
39){ 
40) int Subject=mat[row][column], Right; 
41) Right=mat[row][column+1]; 
42) int Space=My_abs(Subject-Right); 
43) return Space; 
44)} 
45) 
46)int My_abs(int v) 
47){ 
48) return v*((v>0)-(v<0)); 
49)} 

我收到一个错误说“错误:的‘is_strong’传递参数1,使指针从整数,未作类型转换”第19行。我认为我的问题是两种功能相互冲突的类型,但我无法找到我做错了什么。 任何帮助/提示将理解

+1

is_strong需要一个二维数组,你给它一个int。 – yoones

+0

确实..读了关于_declaring_数组(参数或常规变量)和_accessing_数组之间的区别。 – Lundin

+0

谢谢你们俩。我正在阅读有关声明和访问数组之间的差异 – MushroomDiH

回答

0

这是你如何通过你的阵列的功能:

19)  Strong_Amount+=is_strong(matrix, i, j); 
20)  Total_Space+=Space_rank(matrix, i, j); 
+0

非常感谢您的快速回答。代码有效! – MushroomDiH

+0

在这种情况下,您可以竖起大拇指并将答案标记为正确;) –