当作为参数传递时,更新函数中的指针地址.[在C中将指针作为参考传递]

Osa*_*aid 1 c embedded pointers pass-by-reference dereference

CONCEPT:通过引用传递指针

试图实现:从函数获取更新的指针地址,作为参数传递时.

int main(void)
{
    uint8_t unArray[10] = {0};  // unint8_t is type def as unsigned char
    uint8_t * pmyPtr;

    pmyPtr = unArray;

    func(pmyPtr);

    *pmyPtr = someValue3; 

}

void func(uint8_t * unPtr)
{
    *unPtr = someValue1;
     unPtr++;
    *unPtr = someValue2;  
     unPtr++;  

}
Run Code Online (Sandbox Code Playgroud)

假设我们的unArray地址为0x0001000.所以pmyPtr将为0x0001000分配一个常量指针.

当指针传递给函数func时,一些索引(前两个)由DE引用更新.

当我在func执行后回到main时,我正在尝试更新第三个索引.如何实现这一目标.我有一种预感,即双重引用可能很方便.

MKa*_*ama 5

你是对的.指向指针的指针是一个简单的解决方案.在c ++中,它可以在语法上隐藏为引用.

main()
{
    uint8_t unArray[10] = {0};  // unint8_t is type def as unsigned char
    uint8_t * myPtr;

    myPtr = unArray;

    func(&myPtr);//NOTICE ADDRESS TAKING

    *myPtr = someValue3; 

}

void func(uint8_t ** unPtrPtr)//ONE MORE STAR
{
    uint8_t * unPtr=*unPtrPtr;//CHANGED
    *unPtr = someValue1;
     unPtr++;
    *unPtr = someValue2;  
     unPtr++;
    *unPtrPtr = unPtr;//CHANGED
}
Run Code Online (Sandbox Code Playgroud)

  • 这种使用本地指针的方法很好,因为它比直接使用指针指针提供了更好的可读性.没有人想要读取看起来像`*(*unPtrPtr)++;`的代码 (2认同)