前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言函数传递了指针,值没有被修改的原因及解决方法

C语言函数传递了指针,值没有被修改的原因及解决方法

原创
作者头像
用户9470376
发布2024-01-01 08:07:11
3960
发布2024-01-01 08:07:11
举报
文章被收录于专栏:Python全栈零碎笔记

C语言函数指针参数值为什么不变

C语言函数中传递了指针作为参数,确切来说是传递了指向变量的内存地址作为参数,可经过函数内的修改之后,该指针指向的变量的值为什么不会被修改?就像下方这个函数:

代码语言:c
复制
void test(int *x){
    *x++;
}

这是为什么呢?

这个跟运算符的优先级也没有关系,像上面这样的*x++的表达式中,并不会被优先计算x++,即不会先进行内存地址的自增运算。下面的实例中将探讨这一点。

实例代码

该实例输出了三个变量的内存地址,前两个是一样的,即通过*x++的运算,变量指向的内存地址并没有发生改变,但是如果是通过指针的自增运算,比如z++,则内存地址会发生改变。

代码语言:c
复制
#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;

原文:C语言函数传递了指针,值为什么没有被修改

免责声明:内容仅供参考,不保证正确性!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • C语言函数指针参数值为什么不变
  • 实例代码
  • 解决方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档