首页 > 解决方案 > 指向接口的指针的算术,这对于这个架构来说不是一个恒定的大小

问题描述

我已经查看了其他几个都处理此错误的问题,但所有答案基本上都只是说“不要做指针数学”。我的代码如下:

MyObject * __strong * array = (MyObject * __strong *)calloc(sizeof(MyObject*), 5);
array[0] += 4;

我想知道为什么我不能做指针数学。根据错误,MyObject*指向的值具有不同的大小,但这不重要,对吧?它只是一个指针数组——谁在乎它们指向的东西有多大?

我猜我可能只是不了解 ARC 的所有细微差别。

标签: objective-cpointersautomatic-ref-counting

解决方案


您的变量“array”是指向指针的指针,是的,您可以将其视为指针数组。您的对象“MyObject”的大小显然不是恒定的,编译器不允许您执行此类操作是正确的。目前尚不清楚您想对变量做什么。

数组[0] += 4;

从数组的第一个元素中获取“MyObject *”并希望将偏移量添加到 4,但要计算这样的偏移量,编译器想知道对象的大小。可能是你想做类似的事情

    array = array + 4;
or 
    array += 4;

推荐阅读