iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C/C++值传递和址传递有什么区别
  • 590
分享到

C/C++值传递和址传递有什么区别

2023-06-25 11:06:34 590人浏览 独家记忆
摘要

这篇文章主要为大家展示了“C/C++值传递和址传递有什么区别”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C/c++值传递和址传递有什么区别”这篇文章吧。C/C++的按值传递和按地址传递有明显不

这篇文章主要为大家展示了“C/C++值传递和址传递有什么区别”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C/c++值传递和址传递有什么区别”这篇文章吧。

C/C++的按值传递和按地址传递有明显不同,下面对他们作个区别:

按值传递:在调用函数中将原函数的值拷贝一份过去被调用的函数,在被调用函数中对该值的修改不会影响原函数的值。

按地址传递:在调用函数的时候将原函数的值所在的地址拷贝一份过去,被调用函数对这个地址所作的修改会影响原来的值。

概述:

首先我们要知道 a的地址”和“a地址中的内容”的区别,数据是存放在内存中的,每一个变量都有一个内存地址, 变量的内容存放在对应内存地址的空间中

比方说定义

int a = 10;

那么a在内存中的地址是0x1100,在这个地址中存储的数据是10

C/C++值传递和址传递有什么区别

假设创建指针p,把a的地址赋值给p,就是把a的首地址0x1100赋值给指针p,这个时候p的值就是变量a在内存中的首地址

int a =10;int*p;p=&a; //把a的首地址赋值给P

C/C++值传递和址传递有什么区别

简单点的理解就好比你去图书馆借书,每本书都会有他的一个编号(地址),记录它所在的位置,而这个书,就是这个地址对应的内容
如果你用指针,得到的是这个书所对应的编号(地址) ,存储内容就是地址
如果你是变量赋值,值传递,那么就相当于复印了一遍这个书(地址对应的内容),然后用一个新的编号(地址),去存储你复印的这本书

C/C++值传递和址传递有什么区别

从命名来理解

所以我们就会发现:

值传递,或者变量赋值,修改变量的值,修改的是新的新的编号(地址)中的内容(复印的书),不会影响到原来编号(地址)中的数据。

也就是形参是实参内容的拷贝,并不是地址的拷贝,所以改变形参的值并不会影响实参的值

C/C++值传递和址传递有什么区别

使用址传递,用指针修改变量的值,就是把原编号(地址)中的书给修改了,换了一本新的书,就相当于对实参本身进行的操作。

声明Declaration:描述在其他地方创建的对象,并不分配内存。(可以出现在多个地方)

定义Definition:产生一个新的对象,并分配内存。(只能出现一次)

值传递

新开辟一个内存空间,存储原来变量的值,修改变量修改的是新的内存空间中的值。所以,原始的参数不会被函数修改。

值传递的优点: 通过值来传递的参数可以是数字,变量,表达式。原本参数的值不会被修改。

值传递的缺点: 不能修改原参数的值。

#include <stdio.h> void swap (int x, int y){int temp;temp = x;x = y;y = temp;//printf ("x = %d, y = %d\n", x, y);} int main (void){int a = 4, b = 6;printf ("交换前:\n a = %d, b = %d\n", a, b);swap (a, b);printf ("交换后:\n a = %d, b = %d\n", a, b);return 0;}

输出:

C/C++值传递和址传递有什么区别

址传递

址传递就是指针传递,形参实际是指向实参地址的指针,当对形参的进行操作时,就相当于对实参本身进行的操作,可以改变指针指向内容的值,但是不能改变指针本身的地址。

#include <stdio.h>void swap (int *x, int *y){int temp=*x;*x=*y;*y=temp;//printf("x = %d, y = %d\n", *x, *y);} int main(void){int a=4;int b=6;    printf("交换前:\n a = %d, b = %d\n", a, b);swap (&a,&b);  //传递的是地址 printf("交换后:\n a = %d, b = %d\n", a, b);return 0;}

C/C++值传递和址传递有什么区别

在你了解了什么是值传递和址传递之后,我们来看一个面试题

#include <stdio.h>#include <string.h>#include <stdlib.h>void GetMemory( char *p ) {p = (char *) malloc( 100 );}int main (void) {char *str = NULL;GetMemory( str );strcpy( str, "hello world" );printf( str );return 0;}

请问运行会有什么样的结果? 会输出hello world吗?

答:程序崩溃,没有输出

因为 GetMemory 并不能传递动态内存,Test 函数中的 str 一直都是 NULL。strcpy(str, “hello world”);将使程序崩溃
函数中的p其实是实参str的一份拷贝,函数中的操作都是对q进行的,str仍然是NULL,所以输出*str的值产生崩溃

也就是:传递给形参的指针仍然是实参指针的一份拷贝

C/C++值传递和址传递有什么区别

这一点需要注意

解决的话可以把形参改为二重指针,程序便可以按预想中的情形进行:

二重指针指向一重指针的地址 也就是传递过来的实际是*str的参数本身

#include <stdio.h>#include <string.h>#include <stdlib.h>void GetMemory( char **p ) {*p = (char *) malloc( 100 );}int main (void) {char *str = NULL;GetMemory(&str);strcpy( str, "hello world" );printf( str );return 0;}

以上是“C/C++值传递和址传递有什么区别”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网其他教程频道!

--结束END--

本文标题: C/C++值传递和址传递有什么区别

本文链接: https://www.lsjlt.com/news/304097.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C/C++值传递和址传递有什么区别
    这篇文章主要为大家展示了“C/C++值传递和址传递有什么区别”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C/C++值传递和址传递有什么区别”这篇文章吧。C/C++的按值传递和按地址传递有明显不...
    99+
    2023-06-25
  • 解析C/C++值传递和址传递的区别
    C/C++的按值传递和按地址传递有明显不同,下面对他们作个区别: 按值传递:在调用函数中将原函数的值拷贝一份过去被调用的函数,在被调用函数中对该值的修改不会影响原函数的值。 按地址传...
    99+
    2022-11-12
  • C语言值传递和地址传递详解
    目录一. 值传递二.地址传递总结一. 值传递 我们举一个例子: 写一个函数找出两个整数中的最大值。 #include<stdio.h> //get_max函数 int ...
    99+
    2022-11-13
  • JavaScript中值传递和引用传递有什么区别
    JavaScript中值传递和引用传递有什么区别?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。JavaScript是什么JavaScript是一种直译式的脚本语言,其解释器被称...
    99+
    2023-06-14
  • C语言值传递和地址传递的示例分析
    这篇文章给大家分享的是有关C语言值传递和地址传递的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一. 值传递我们举一个例子:写一个函数找出两个整数中的最大值。#include<stdio.h>...
    99+
    2023-06-26
  • java中值传递和引用传递有哪些区别
    这篇“java中值传递和引用传递有哪些区别”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“java中值传递和引用传递有哪些区别...
    99+
    2023-07-04
  • php按值传递和引用传递的区别是什么
    这篇文章主要讲解了“php按值传递和引用传递的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php按值传递和引用传递的区别是什么”吧!说明按值传递中php必须复制值。特别是对于大型...
    99+
    2023-06-20
  • java中值传递和引用传递的区别是什么
    在Java中,值传递(pass by value)和引用传递(pass by reference)是两种不同的参数传递方式。值传递是...
    99+
    2023-08-14
    java
  • C语言函数传递数组和传递地址的区别你知道吗
    目录传递数值传递地址注:总结传递数值 code: #include <stdio.h> void deliveryData(int data) { data = d...
    99+
    2022-11-12
  • JS中值传递和引用传递的区别有哪些
    这篇文章主要介绍了JS中值传递和引用传递的区别有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。JS是什么JS是JavaScript的简称,它是一种直译式的脚本语言,其解释...
    99+
    2023-06-14
  • C++中传值、传地址和传引用的区别是什么
    小编给大家分享一下C++中传值、传地址和传引用的区别是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!传引用定义传值与传地址,相信大家都了如指掌了,在这里先介绍...
    99+
    2023-06-20
  • python值传递和引用传递有什么不同
    在Python中,变量的传递方式既不是纯粹的值传递,也不是纯粹的引用传递,而是一种称为"对象的引用传递"的方式。值传递是指在函数调用...
    99+
    2023-09-23
    python
  • c++值传递的方式有哪些
    在C++中,值传递的方式有以下几种: 基本类型的值传递:将基本类型的值复制给函数的参数。 对象的值传递:将对象的副本传递给函...
    99+
    2023-10-27
    c++
  • C++中传值、传地址和传引用究竟有哪些区别
    目录传引用定义传引用与传值的区别传指针(地址)与传引用的区别总结传引用定义 传值与传地址,相信大家都了如指掌了,在这里先介绍一下什么是引用? 引用不是新定义一个变量,而是给已存在变量...
    99+
    2022-11-12
  • C#怎么实现按值传递参数
    这篇文章主要讲解了“C#怎么实现按值传递参数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#怎么实现按值传递参数”吧!按值传递参数这是参数传递的默认方式。在这种方式下,当调用一个方法时,会...
    99+
    2023-06-17
  • Python函数值传递、引用传递、形式参数和实际参数的区别是什么
    本篇内容主要讲解“Python函数值传递、引用传递、形式参数和实际参数的区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python函数值传递、引用传递、形式参数和实际参数的区别是什么”...
    99+
    2023-06-30
  • Python函数值传递引用传递及形式参数和实际参数的区别
    通常情况下,定义函数时都会选择有参数的函数形式,函数参数的作用是传递数据给函数,令其对接收的数据做具体的操作处理。 在使用函数时,经常会用到形式参数(简称“形参&rdqu...
    99+
    2022-11-11
  • C++指针传递的作用是什么
    这篇文章主要介绍了C++指针传递的作用是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++指针传递的作用是什么文章都会有所收获,下面我们一起来看看吧。具体如下void pointerTest(i...
    99+
    2023-07-05
  • php中传值与传址的区别是什么
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑值传递值传递是 PHP 中函数的默认传值方式,也称为“拷贝传值”。顾名思义值传递的方式会将实参的值复制一份再传递给函数的形参,所以在函数中操作参数的值并不会对函数外的实...
    99+
    2021-08-13
    php 传值 传址
  • C++参数传递应用方式是什么
    本篇内容主要讲解“C++参数传递应用方式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++参数传递应用方式是什么”吧!引用是C++中的概念,初学者容易把引用和指针混淆一起。 一下程序中,...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作