C语言函数传递了指针,值没有被修改的原因及解决方法
2024-01-01 08:56:55
C语言函数指针参数值为什么不变
C语言函数中传递了指针作为参数,确切来说是传递了指向变量的内存地址作为参数,可经过函数内的修改之后,该指针指向的变量的值为什么不会被修改?就像下方这个函数:
void test(int *x){
*x++;
}
这是为什么呢?
这个跟运算符的优先级也没有关系,像上面这样的*x++的表达式中,并不会被优先计算x++,即不会先进行内存地址的自增运算。下面的实例中将探讨这一点。
实例代码
该实例输出了三个变量的内存地址,前两个是一样的,即通过*x++的运算,变量指向的内存地址并没有发生改变,但是如果是通过指针的自增运算,比如z++,则内存地址会发生改变。
#include <stdio.h>
void test(int *x){
*x++;
}
int main() {
int y = 1;
printf("%x\n",&y);
test(&y);
printf("%x\n",&y);
int *z = &y;
z++;
printf("%x\n",z);
}
//编译运行之后得到输出(不同的平台和编译器可能得到不一样的输出):
61fe14
61fe14
61fe18
解决方法
将*x++修改为:*x = *x + 1;
来源:笨鸟工具
免责声明:内容仅供参考,不保证正确性!
文章来源:https://blog.csdn.net/weixin_47378963/article/details/135322169
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!