这个问题在这里已有答案:
有一个警告显示指针转换不兼容,第4行中也有一个注释“预期的char **但参数类型为char * [2]”。
但为什么请帮助和解释。这个问题可以通过动态内存分配来解决吗?
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
char** cavityMap(int grid_count, char **grid) {
int i, j, max = 0;
char y = 'X';
if (grid_count == 1) {
return grid;
} else {
for (i = 0; i < grid_count; i++)
for (j = 0; j < grid_count; j++) {
if (max < (int) grid[i][j]) {
max = grid[i][j];
}
}
for (i = 0; i < grid_count; i++)
for (j = 0; j < grid_count; j++) {
if (i != 0 && i != grid_count - 1 && j != 0 && j != grid_count - 1) {
if (grid[i][j] == (char) max)
grid[i][j] = y;
}
}
return grid;
}
return 0;
}
int main() {
int n = 2, i, j;
char **result;
char s[2][2];
s[0][0] = '1';
s[0][1] = '7';
s[1][0] = '6';
s[1][1] = '8';
result = cavityMap(n, s);
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
printf("%c", result[i][j]);
}
printf("\n");
}
return 0;
}
正如其他人所说,char **a
与char a[][]
不同
但是如果你有char a[n][n]
,你可以将它作为参数发送给函数,只要你也告诉函数n
是什么。像这样
#include <stdio.h>
void
process_array(int n, char a[n][n])
{
for (int i=0; i < n; i++)
{
for (int j=0; j < n; j++)
printf("%c", a[i][j]);
}
}
int
main()
{
char a[2][2] = {{'h', 'o'}, {'l', 'a'}};
process_array(2, a);
printf("\n");
}
哦,顺便说一句,如果你的阵列不是正方形,你应该可以做到
void
process_array(int n, int m, char a[n][m])
这里的要点是,当在现代c中将数组声明为函数参数时,数组维度不必是这样的常量:
void
process_array(char a[2][2])
请记住,数组总是作为函数参数中的指针传递,因此在sizeof(a)
中执行process_array
将返回指针的大小