c - 将短 * 传递给短 *(*)[ ] 的不兼容指针类型
问题描述
当然,我在这里做错了,但是看着这个我不知道为什么我会收到这些警告:
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 *ptr0 = &src0[0][0];
__int16_t *ptr1 = &src1[0][0];
被显式声明为具有 type __int16_t *
。
但是对应的函数参数
void hammingDistance2d(__int16_t *src0[N][N],
__int16_t *src1[N][N]){
其实有类型__int16_t * ( * )[N]
。
没有从第一种类型到第二种类型的隐式转换。所以编译器发出错误。
看来你的意思是以下
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;
}
}
}
}
函数调用看起来像
hammingDistance2d( src0, src1 );
如果要声明用作函数参数的中间指针,则应编写
__int16_t ( *ptr0 )[N] = src0;
__int16_t ( *ptr1 )[N] = src1;
并调用函数
hammingDistance2d( ptr0, ptr1 );
推荐阅读
- sql - Postgresql group by 多行
- matlab - 从 MATLAB 命令行窗口搜索 Simulink MATLAB 功能块代码以查找匹配字符串
- tensorflow - 生成tf记录时的Tensorflow类型错误
- javascript - React 和 Three.JS FBXLoader:模型不可见且控制台中没有错误
- android - 当我在 viewpager 中更改片段时,如何在工具栏上的 searchview 上保留文本?
- javascript - 从链接中删除 href 但需要下拉菜单
- performance - 实时数据可视化示例
- sqlite - sql lite获取行号并为每个组重置
- android - Android WebView 无法加载说明 net::ERR_INSUFFICIENT_RESOURCE 的 URL
- cmake - 如何帮助“FindPkgConfig.cmake”找到一个包?