分配指向const的指针

时间:2016-09-22 16:32:15

标签: c teensy

这就是我正在做的事情:

TFSR: (TFSR Optional("Name") => Optional("Address"))
    Returning false
TFSR: (TFSR Optional("Address") => Optional("City"))
    Returning false
TFSR: (TFSR Optional("City") => Optional("State"))
    Returning false
TFSR: (TFSR Optional("State") => Optional("Zipcode"))
    Returning false
GA
ADDR: `Optional("2112 Murray Avenue ") Optional("Pittsburgh ") Optional("PA") Optional("15217")'
(lldb) 

我的目标是尝试指向正确的结构或左侧结构:

    func geocodeAddress() {
        //...
        geoCoder.geocodeAddressString(addr, completionHandler: {
            (placemarks: [CLPlacemark]?, error: NSError?) -> Void in
            //...
        } as! CLGeocodeCompletionHandler)    //<<< Thread 1: EXC_BREAKPOINT (code=1, subcode=0x10006c518)
    }

编译器说:

geocodeAddressString()

如何让我的代码工作?

1 个答案:

答案 0 :(得分:1)

您将LAYERS定义为3D指针数组。你想要一个指向3D数组的const指针:

const uint16_t (*LAYERS)[TOTAL_LAYERS][NBROW][NBCOL];

但要使用此功能,您需要使用以下语法:

(*LAYERS)[a][b][c];

如果您想将LAYERS索引为3D数组,则可以这样定义:

const uint16_t (*LAYERS)[NBROW][NBCOL];

并按照以下方式分配:

LAYERS = LAYERS_RIGHT;

这利用了这样的事实:在某些上下文中,数组衰减为指向第一个元素的指针。上述任务就是其中之一。

LAYERS_RIGHTconst uint16_t [NBROW][NBCOL]的数组,因此其中一个数组元素的地址类型为const uint16_t (*)[NBROW][NBCOL],这是LAYERS的类型。

然后LAYERS[0]引用第一个const uint16_t [NBROW][NBCOL]LAYERS[1],第二个,等等。

所以在上面的作业之后,这个表达式

LAYERS_RIGHT[a][b][c];

产生与此表达式相同的值:

LAYERS[a][b][c];