我的功能如下:
void findScarf1(bool ** matrix, int m, int n, int radius, int connectivity);
并在 main 函数中创建2d动态数组以传递此函数
bool matrix[6][7] = {
{0, 0, 1, 1, 1, 0, 0},
{0, 0, 1, 1, 1, 0, 0},
{0, 0, 1, 1, 1, 0, 0},
{0, 0, 1, 1, 1, 0, 0},
{0, 0, 1, 1, 1, 0, 0},
{0, 0, 1, 1, 1, 0, 0}
};
问题是:
findScarf1(matrix, 6, 7, 3, 4);
原因 错误C2664:'findScarf1':无法将参数1从'bool [6] [7]'转换为'bool **'
如何紧凑地初始化数组(同时声明)?
P.S。对不起,如果它是重复的问题,但我花了1.5个小时搞清楚
答案 0 :(得分:3)
如果你看看你的数组是如何在内存中布局的,并比较指针指针“矩阵”的布局方式,你就会明白为什么你不能将矩阵作为指针指针传递。
你的矩阵是这样的:
[ matrix[0][0] | matrix[0][1] | ... | matrix[0][6] | matrix[1][0] | matrix[1][1] | ... ]
指向指针的矩阵是这样的:
[ matrix[0] | matrix[1] | ... ] | | | v | [ matrix[1][0] | matrix[1][1] | ... ] v [ matrix[0][0] | matrix[0][1] | ... ]
您可以通过更改函数参数来解决此问题:
bool (*matrix)[7]
这使得参数matrix
成为一个指向数组的指针,它将起作用。
顺便说一句,你拥有的matrix
变量不是动态的,它已被编译器完全声明和初始化,没有任何动态。
答案 1 :(得分:2)
从技术上讲,2D阵列是一维阵列的数组。所以它无法转换为指向的指针。但它可以转换为指向数组的指针。
所以这应该有效:
void findScarf1(bool (*matrix)[7], int m, int n, int radius, int connectivity);
这里bool (*matrix)[7]
声明了一个指向7 bool 数组的指针。
希望有所帮助。
答案 2 :(得分:1)
您可以将功能定义为:
void findScarf1(bool * matrix, int m, int n, int radius, int connectivity);
或
void findScarf1(bool matrix[][7], int m, int n, int radius, int connectivity);
无论数组有多少维度,它都只是一个线性内存块。
当您使用第一种方式时,您可能需要在调用此函数时进行强制转换:
findScarf1((bool *)marix, 6, 7, 3, 4);
答案 3 :(得分:1)
我的以下示例可能对您有所帮助:
#include<stdio.h>
void f(int (*m)[7]){ // As Nawaz answred
printf("%d\n", m[3][3]);
}
void _f(int m[6][7]){ // As I commented to your question
printf("%d\n", m[3][3]);
}
void _f_(int m[][7]){// Second form of Nawaz's answe
printf("%d\n", m[3][3]);
}
void f_(int (*m)[6][7]){// Pointer of 2D array
printf("%d\n", (*m)[3][3]);
}
int main(){
int matrix[6][7] = {
{0, 0, 1, 1, 1, 0, 0},
{0, 0, 1, 3, 1, 0, 0},
{0, 0, 1, 4, 1, 0, 0},
{0, 0, 1, 5, 1, 0, 0},
{0, 0, 1, 6, 1, 0, 0},
{0, 0, 1, 7, 1, 0, 0}
};
f(matrix);
_f(matrix);
_f_(matrix);
f_(&matrix);
return 1;
}
问题没有归结为c,但我用gcc编译(我没有安装g ++)。
~$ gcc -Wall -pedantic 2d.c
~$ ./a.out
5
5
5
5
我本来不打算发一个答案,但是因为我对Nawaz的回答是错误的,所以在实验过程中我写了这段代码。
在这里可以找到它在codepacde
工作