整数指针作为函数的参数

Haxify
void inc(int *p) {
    p += 1;
}

int main() {
    int x = 5;
    inc(&x);

    printf("x = %d\n", x);

    return 0;
}

我发现该代码不会增加x的值。
当我改变时它起作用

void inc(int *p) {
    p += 1;
}

void inc(int *p) {
    *p += 1;
}

现在有点与指针混淆了。
有人能帮我吗?
先感谢您!

拥抱先生

这两段代码之间的区别是增加指针所包含的地址与更改实际值之间的区别。

第一部分代码:p += 1;p指向的地址增加一个。例如,如果x在地址124处,则p首先等于124,现在增加至125(在一个简单的场景中,实际上这将增加更多,就像p整数指针一样,因此增加将超过1个字节)。

第二段代码:*p +=1;首先取消引用地址,p然后在当前存储在该地址中的值上加一个。例如,如果x在地址124处且值为42,则p等于124,但是*p被引用的指针且等于42然后,您可以分配一个新值以*p使地址124处的值(即的值x)等于43

编辑:如@Bathsheba所述,指针是按值传递给函数调用的。这意味着,如果我们要执行以下操作,则原始指针y将保持不变,而p指向的地址确实如上所述发生变化。

void inc(int *p) {
    p += 1;
}

int main() {
    int x = 5;
    int *y = &x;
    inc(y);
    return 0;
}

至于关于结构的第二个问题。结构指针仍然包含内存中结构的地址,但是您引用的“箭头符号”将为您隐式地对字段进行解引用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

指针作为函数的参数

来自分类Dev

函数指针原型,它使用三个整数指针作为参数并返回字符指针

来自分类Dev

接口指针作为函数参数

来自分类Dev

函数指针作为模板参数

来自分类Dev

指针作为函数参数的麻烦

来自分类Dev

LLVM指针作为函数参数

来自分类Dev

使用指针作为函数的参数

来自分类Dev

双指针作为函数参数

来自分类Dev

双指针作为函数的参数

来自分类Dev

指针上的golang指针作为函数参数

来自分类Dev

指向const的指针作为函数参数

来自分类Dev

使用引用指针作为函数参数的危险

来自分类Dev

将指针作为函数参数传递

来自分类Dev

指向函数的C ++指针作为参数

来自分类Dev

显式void指针作为函数参数

来自分类Dev

Arduino:结构指针作为函数参数

来自分类Dev

C ++函数指针作为Doxygen中的参数

来自分类Dev

const指针作为函数参数的含义

来自分类Dev

void **指针和void * []作为函数参数

来自分类Dev

函数指针作为Java 8中的参数

来自分类Dev

使用值代替指针作为函数参数

来自分类Dev

模板化函数指针作为模板参数

来自分类Dev

在C函数中将指针作为参数传递

来自分类Dev

如何让函数将指针作为参数接收?

来自分类Dev

将双指针作为函数参数传递

来自分类Dev

用指针作为参数问题的C ++函数

来自分类Dev

c ++类方法指针作为函数参数

来自分类Dev

函数指针作为参数的C ++问题

来自分类Dev

C ADT函数指针作为参数?