【发布时间】:2020-02-05 22:42:39
【问题描述】:
当然,我在这里做错了,但是看着这个我无法弄清楚为什么我会收到这些警告:
warning: incompatible pointer types passing '__int16_t *' (aka 'short *') to parameter of type '__int16_t *(*)[4]' [-Wincompatible-pointer-types]
hammingDistance2d(ptr0, ptr1);
在我的小代码段中:
void hammingDistance2d(__int16_t *src0[N][N],
__int16_t *src1[N][N]){
int i, j;
__uint16_t Hdis[N][N] = {0};
for (i=0 ; i<N; i++){
for (j=0; j<N; j++){
__uint16_t z = *src0[i][j] ^ *src1[i][j];
while (z > 0)
{
Hdis[i][j] += z & 1;
z >>= 1;
}
}
}
int main(){
__int16_t src0[N][N] = { { 1, 1, 1, 1},
{ 2, 2, 2, 2},
{ 3, 3, 3, 3},
{ 4, 4, 4, 4} };
__int16_t src1[N][N] = { { 1, 1, 1, 1},
{ 2, 2, 2, 2},
{ 5, 5, 5, 5}, // different row
{ 4, 4, 4, 4} };
__int16_t *ptr0 = &src0[0][0];
__int16_t *ptr1 = &src1[0][0];
hammingDistance2d(ptr0, ptr1);
return 0;
}
我想继续使用指向数组的中间指针。
【问题讨论】:
-
为什么使用
__int16_t(系统类型;双下划线前缀为实现保留)而不是int16_t(类型名称的可用版本)? -
*src0[N][N]是一个二维指针数组,您将一个二维整数数组的一个元素的地址传递给该指针。
标签: c arrays pointers implicit-conversion