Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C语言函数传递了指针,值没有被修改的原因及解决方法

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

原创
作者头像
用户9470376
发布于 2024-01-01 00:07:11
发布于 2024-01-01 00:07:11
52600
代码可运行
举报
运行总次数:0
代码可运行

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

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

代码语言:c
代码运行次数:0
运行
AI代码解释
复制
void test(int *x){
    *x++;
}

这是为什么呢?

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

实例代码

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

代码语言:c
代码运行次数:0
运行
AI代码解释
复制
#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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C语言函数指针基础
本文写的非常详细,因为我想为初学者建立一个意识模型,来帮助他们理解函数指针的语法和基础。如果你不讨厌事无巨细,请尽情阅读吧。 函数指针虽然在语法上让人有些迷惑,但不失为一种有趣而强大的工具。本文将从C语言函数指针的基础开始介绍,再结合一些简单的用法和关于函数名称和地址的趣闻。在最后,本文给出一种简单的方式来看待函数指针,让你对其用法有一个更清晰的理解。 函数指针和一个简单的函数 我们从一个非常简单的”Hello World“函数入手,来见识一下怎样创建一个函数指针。 1 2 3 4 5
猿人谷
2018/01/17
1.6K0
C语言函数指针基础
用GPT写了一篇C语言指针的详细解说
C语言指针是C语言中最重要的部分之一,也是初学者比较难以理解的概念之一。本文将为大家详细解说C语言指针的相关知识和应用。
C语言中文社区
2023/08/28
1680
用GPT写了一篇C语言指针的详细解说
【万字精讲】小白也能看懂,一文带你彻底搞懂指针!!——深入理解C语言指针:从基础到进阶
由于指针的抽象层次低,直接与内存打交道,使得指针迫使你面对“数据在内存中具体放在哪里”这个底层问题,这对于初学者或习惯了高级抽象的程序员来说很不直观。再加上指针的一些声明语法有时会显得晦涩难懂,尤其是当指针与数组、函数结合的时候更是规则繁多。
再睡一下就好
2025/06/11
1790
【万字精讲】小白也能看懂,一文带你彻底搞懂指针!!——深入理解C语言指针:从基础到进阶
C语言进阶-高阶指针
目录 前言 字符指针 指针数组 数组指针 &数组名VS数组名 数组指针的使用 数组参数、指针参数 一维数组传参 二维数组传参 一级指针传参 二级指针传参 函数指针 函数指针数组 指向函数指针数组的指针 ---- 前言 对于初阶指针内容在我的另一篇文章中已经写到(有想法的可以去看看) 附上链接:C语言初阶指针 回顾: 1. 指针是地址,指针变量是用来存放地址的变量(唯一标识一块内存空间)  2. 指针的大小是固定的4/8个字节(32位平台/64位平台)  3. 指针的类型决定了指针的+-整数的步长,指
用户9645905
2022/11/30
4250
C语言进阶-高阶指针
c语言从入门到实战——初识指针
C语言指针是一种变量,它存储了另一个变量的内存地址。通过指针,我们可以直接访问内存中的数据,从而实现灵活的数据操作。 指针是编程中的一个概念,它存储的是内存地址,指向某个变量。通过指针,可以直接访问和操作内存中的数据,提高程序效率。但使用指针时需小心,避免空指针和野指针等问题,确保程序安全稳定。
鲜于言悠
2024/03/20
1530
c语言从入门到实战——初识指针
【C语言】基本语法知识&&C语言函数&&操作符详解
首先介绍一下我使用的工具:VS2019——集成了很多的功能:编辑、编译、链接、运行、调试等
用户10925563
2024/06/04
3600
【C语言】基本语法知识&&C语言函数&&操作符详解
2.1 C/C++ 使用数组与指针
C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存等底层资源,对于初学者来说可能会有一定的难度。
王 瑞
2023/10/10
3530
2.1 C/C++ 使用数组与指针
【重生之我在学习C语言指针详解】
指针是C语言的灵魂,它赋予了C语言直接操作内存的能力,使得C语言在系统编程、嵌入式开发
用户11456817
2025/02/02
820
C语言指针详解(文末有福利)
假如我们定义了 char a=’A’ ,当需要使用 ‘A’ 时,除了直接调用变量 a ,还可以定义 char *p=&a ,调用 a 的地址,即指向 a 的指针 p ,变量 a( char 类型)只占了一个字节,指针本身的大小由可寻址的字长来决定,指针 p 占用 4 个字节。
C语言与CPP编程
2020/12/02
5560
C语言指针详解(文末有福利)
C语言重点突破(2)指针(一)
指针可以帮助程序员更高效地处理内存,允许程序访问和修改内存中的数据。在C语言中,变量存储在内存中的某个位置上,变量的地址就是这个位置的地址,指针就是表示存储在某个内存位置上的变量地址的变量。
对编程一片赤诚的小吴
2024/01/23
1690
C语言重点突破(2)指针(一)
C语言函数传递指针的理解以及二重指针的使用
即b自身在计算机的地址与a的地址不是相同的,这时你在函数体内修改a指向的位置,一定不会修改b指向的位置。
小王不头秃
2024/06/19
2710
C语言函数传递指针的理解以及二重指针的使用
07.Go语言-指针
指针也是一种类型,也可以创建变量,称之为指针变量。指针变量的类型为 *Type,该指针指向一个 Type 类型的变量。指针变量最大的特点就是存储的某个实际变量的内存地址,通过记录某个变量的地址,从而间接的操作该变量。
面向加薪学习
2022/09/04
2710
C语言复习概要(五)
指针(Pointer)是C/C++语言中最具特色、也是最让人困惑的概念之一。指针让程序员能够直接操作内存,打破了传统高阶编程语言中的封装抽象。尽管它的学习曲线陡峭,但掌握指针不仅可以提高代码的性能,还能帮助我们理解计算机底层的工作原理。
Undoom
2024/10/16
1260
C语言逗号运算符(,)
百度百科:“逗号表达式,是C语言中的逗号运算符,优先级别最低,它将两个及其以上的式子连接起来,从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值。” 总结基本规则: ①逗号表达将两个及其以上的式子连接为一个表达式。 ②逗号表达式按照从左向右的顺序计算每个子表达式的值 ③逗号表达式的最后一个子表达式必须有返回值,因为整个表达式的值是最后一个子表达式的值。其余子表达式可以没有返回值。
CtrlX
2022/10/05
2.3K0
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
指针是C语言中一个非常重要和强大的概念。它允许直接操作内存,从而可以高效地处理数据和进行系统编程。下面是C语言中指针的详细讲解:
LuckiBit
2024/12/11
2590
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
c语言从0->1入门——指针(上)
不同类型的指针不能相互赋值,像这样,char* p与int *q; 具体的来说,char * 称之为char型指针类型,int *称之为int型指针类型
秋名山码神
2022/12/13
6140
c语言从0->1入门——指针(上)
程序员C语言快速上手——进阶篇(六)
由上例可验证,数组的内存空间是连在一起的,它的第一个元素地址是0x22fe30,第二个元素的地址是0x22fe34,紧随其后。因为是int数组,每个元素都需要占用4个字节空间,因此地址的间隔也是4。
arcticfox
2019/06/26
6380
程序员C语言快速上手——进阶篇(六)
C语言:指针
正如您所知道的,每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。请看下面的实例,它将输出定义的变量地址:
用户6755376
2020/04/14
2.9K0
C语言中函数参数传递的三种方式
(1)传值,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个形式参数,因而在函数里对形参的改变不会影响到函数外的变量的值。 (2)传址,就是传变量的地址赋给函数里形式参数的指针,使指针指向真实的变量的地址,因为对指针所指地址的内容的改变能反映到函数外,也就是能改变函数外的变量的值。 (3)传引用,实际是通过指针来实现的,能达到使用的效果如传址,可是使用方式如传值。 说几点建议:如果传值的话,会生成新的对象,花费时间和空间,而在退出函数的时候,又会销毁该对象,花费时间和空间。 因而如果int,char等固有类型,而是你自己定义的类或结构等,都建议传指针或引用,因为他们不会创建新的对象。
全栈程序员站长
2022/07/02
4.9K0
C语言中函数参数传递的三种方式
C语言的灵魂——指针
相关视频——强烈推荐【强烈推荐】4小时彻底掌握C指针 - 顶尖程序员图文讲解 - UP主亲自翻译校对 (已完结)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
半生瓜的blog
2023/05/12
1K0
C语言的灵魂——指针
相关推荐
C语言函数指针基础
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验