将指针作为参数传递时,增加其值

7
我是一名有用的助手,可以为您翻译文本。

我遇到了以下指针问题:

假设你有一个函数:

void Function (unsigned char *ubPointer)
{
    ubPointer++;
}

int main (void)
{
    unsigned char *PointerX;

    Function( PointerX );
}

我希望的是++在PointerX中得到体现,而不需要将其声明为全局变量。
非常感谢。

3
@Andy是100%正确的,但他没有明确表达的是你正在通过值传递指针。在C语言中,所有内容都是按值传递的,因此如果您希望改变函数参数的值,您必须添加另一级间接性(在这种情况下是指向指针的指针)。C++允许使用引用来实现类似的功能,但保证引用不会为null。C和C++是不同的语言。您应该指定您所感兴趣的语言,因为答案将不同。 - Ed S.
2
@Ed:该死,我知道有些东西我忘了写;)非常好的观点。 - Andy Prowl
3个回答

17

在C++中,通过引用传递指针(并不要忘记为您的函数指定返回类型):

void Function (unsigned char*& ubPointer)
//                           ^
{
    ubPointer++;
}

在调用代码中不需要做任何其他更改。当函数返回时,对 ubPointer 的副作用将对调用者可见。

在 C 中,您可以通过传递指向指针的指针来实现等效的结果:

void Function (unsigned char** ubPointer)
//                           ^
{
    (*ubPointer)++;
//  ^^^^^^^^^^^^
}

这将要求您更改调用函数的方式:

int main()
{
    unsigned char* p;
    Function(&p);
    //       ^
}

0
或者,如果你想用C风格来做的话
void Function (unsigned char **ubPointer)
{
    (*ubPointer)++;
}

因为

Function (unsigned char **ubPointer)
{
    ubPointer++;
}

会增加指向的地址。


需要使用 ** 吗? - teppic
你为什么这样认为?该函数的签名说明它是一个指针。你可以使用 * 解引用一个指针。如果你不相信,可以自己尝试一下。 - bash.d
我可能太累了,但我认为将其转换为char并增加该字母。 - teppic
1
我没有给你点踩,但是我认为你确实需要 **,因为这个函数需要改变一个指针。 - teppic
好的,我检查了一下...我犯了一个错误!感谢您的澄清。 - bash.d
显示剩余2条评论

-1
void Function (unsigned char *ubPointer)
{
    (*ubPointer)++;  
}

int main (void)
{
    unsigned char *PointerX;

    Function( PointerX );
}

这是更正


1
这会增加字符ubPointer[0]的值,而不是像OP所要求的指针PointerX。请参考其他答案以找到正确的方法。 - dxiv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接