objective-c – 在Objective C中传递一个可变长度的int数组作为函数参数

objective-c – 在Objective C中传递一个可变长度的int数组作为函数参数,第1张

概述我有以下代码,工作正常… int testarr[3][3] = { {1,1,1}, {1,0,1}, {1,1,1}}; [self testCall: testarr]; 哪个叫这个功能: - (void)testCall: (int[3][3]) arr { NSLog(@"cell value is %u",arr[1][1]);} 我需要数组的长度可变 我有以下代码,工作正常…
int testarr[3][3] = {  {1,1,1},{1,1}};   [self testCall: testarr];

哪个叫这个功能:

- (voID)testCall: (int[3][3]) arr {    NSLog(@"cell value is %u",arr[1][1]);}

我需要数组的长度可变 – 声明函数的最佳方法是什么?

使用空格不起作用:

- (voID)testCall: (int[][]) arr {

谢谢你的帮助.

解决方法 我会这样写:
- (voID) testCall: (int *) aMatrice;

这样做可以避免多个mallocs和数学计算基于x,y坐标的线性数组中的单个偏移量在2D数组中是微不足道的.它还避免了int **隐含的多个mallocs以及该语言所延续的2D数组语法的局限性.

所以,如果你想要一个4×5阵列,你可能会:

#define WIDTH 4#define HEIGHT 5#define INDEXOF(x,y) ((y*WIDTH) + x)int *myArray = malloc(sizeof(int) * 5 * ELEMS_PER_ROW);

然后,您可以线性地或使用嵌套的for循环初始化数组:

for(int x=0; x<wIDth; x++)    for(int y=0; y<height; y++)        myArray[INDEXOF(x,y)] = ... some value ...;

你会把它传递给方法,如:

[foo testCall: myArray];

虽然您可能还希望同时携带宽度和高度,或者更好的是,创建一个NSObject的IntMatrix子类,它将所有指针算术和存储包装在一个漂亮的干净API之外.

(所有代码都输入SO)

总结

以上是内存溢出为你收集整理的objective-c – 在Objective C中传递一个可变长度的int数组作为函数参数全部内容,希望文章能够帮你解决objective-c – 在Objective C中传递一个可变长度的int数组作为函数参数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1241032.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存