【问题标题】:C pointer to function with cast指向具有强制转换功能的 C 指针
【发布时间】:2020-05-03 14:41:53
【问题描述】:

我有一个需要二维整数数组的函数:

void Add_Binary_To_Matrix(int (*qrMatrix)[21], int *binPtr,
        int x, int y, int count, int skipper, int direction)

这个数组是一个一维指针数组,但我为每一行添加了内存(这也使它成为一个二维整数数组,对吧?):

int *qrCopy[currentVersion->height];
for (int i = 0; i < currentVersion->height; i++) 
    qrCopy[i] = malloc(currentVersion->height * sizeof(int));

所以我尝试了很多方法,但都不起作用:

Add_Binary_To_Matrix((int *)qrCopy, binPtr, 20, 20, 0, 0, 1);
Add_Binary_To_Matrix(qrCopy, binPtr, 20, 20, 0, 0, 1);
Add_Binary_To_Matrix(&((int *)qrCopy[0]), binPtr, 20, 20, 0, 0, 1);

但是像这样传递它似乎不起作用所以我的问题是如何将这个数组传递给函数?

【问题讨论】:

  • 你应该描述发生这种情况的上下文——函数是做什么的,在你调用这个函数之前你有什么形式的数据,你可以改变这个函数还是只能改变如何你叫它?这里的主要问题不是容易更改的参数和参数类型,而是数据在内存中的布局方式。参数qrMatrix 是否仅指向一个包含 21 个int 的数组,或者可能指向多个数组,在内存中连续布局?

标签: c arrays function pointers


【解决方案1】:

无法将数组传递给函数。

int (*qrMatrix)[21] 的类型是指向“21 元素整数数组”的指针。

qrCopy 是一个指针数组,所以不能传递。

如何设置参数:创建一个数组并获取指向它的指针。

int array[21];
Add_Binary_To_Matrix(&array, binPtr, 20, 20, 0, 0, 1);

【讨论】:

  • 问题不清楚,但int *qrCopy[currentVersion-&gt;height];的使用表明数组不止一行。那么int array[21]; 应该是int array[currentVersion-&gt;height][21]; 并且参数&amp;array 应该是array
猜你喜欢
  • 1970-01-01
  • 2013-09-13
  • 2015-09-10
  • 2013-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多