C语言:传值,传地址

形参:形式参数
实参:实际参数

传值:
  把实参的值复制给形参,
  修改函数内的形参,不会影响实参。

传地址:
  指针传值,形参为指向实参地址的指针
  当对形参的指向操作时,相当于对实参本身进行的操作

#include <iostream>
// 交换位置
//  “值调用”
void swap_value(int x, int y) {
    int temp = x;
    x = y;
    y = temp;

}
// “引用调用1”,形参:传的是地址,取得是值(*)
void swap_p(int *x, int *y) {
    int temp = *x;
    *x = *y;
    *y = temp;
}
// “引用调用2”,形参:传的是值,接的是地址
void swap_addr(int &a, int &b) {
    int temp = a;
    a = b;
    b = temp;
}
main() {
    int x = 0;
    int y = 1;
    printf("x = %d, y = %d\n", x, y);

    swap_value(x, y);
    printf("传值调用后:x = %d, y = %d\n", x, y);

    swap_p(&x, &y);
    printf("传地址调用后:x = %d, y = %d\n", x, y);

    swap_addr(x, y);
    printf("传值接地址调用后:x = %d, y = %d\n", x, y);
}
x = 0, y = 1
传值调用后:x = 0, y = 1
传地址调用后:x = 1, y = 0
传值接地址调用后:x = 0, y = 1
时间: 2024-10-19 20:24:00

C语言:传值,传地址的相关文章

JAVA的String的传值和传地址问题

关于Java的String类型,可能你会碰到这种情况,将String类型的变量传到一个函数,在这个函数中修改变量的值,但是,实参的值并没有发生改变. Java中String的传值/传地址问题: 例子引入: 1 package com.cnblog.GDUTtiantian.String; 2 3 /** 4 * @author GDUTtiantian 5 */ 6 public class JavaString { 7 8 public static void change(String na

C语言结构体,C语言结构体指针,java对象引用,传值,传地址,传引用

C语言结构体,C语言结构体指针,java对象引用,传值,传地址,传引用 传值 把实参的值赋值给行参 那么对行参的修改,不会影响实参的值 传地址 传值的一种特殊方式,只是他传递的是地址,不是普通的如int 那么传地址以后,实参和行参都指向同一个对象 传引用 真正的以地址的方式传递参数 传递以后,行参和实参都是同一个对象,只是他们名字不同而已 对行参的修改将影响实参的值 所谓变量是内存地址的一个抽象名字,在静态编译的程序中,所有变量名都会在编译时转换成内存地址,机器不知道变量名,只知道地址. C 语

C语言-传值,传地址(指针),传引用区别和联系

很多编程老手对传值,传地址,传引用的区别搞的也不会很清楚,今天我就花一点时间再次介绍一下这些概念的本质. 其实,不用分为三类,只有两类即可.传值和传引用.为什么会出现传地址(即传指针)呢?本质就是大家一致对传值和传地址概念的理解错误导致,也是对指针的概念的理解错误导致. 指针:(简单补充一下)其实很简单,指针就是一个变量,如果非要说是一个特殊的变量也不为过,因为指针的初始化和解引用等不同的操作方式而已.就内存的分布来说,指针和一个变量在内存中存放是没有任何区别的,无非指针存放的是变量的地址,就是

go语言---传值和传引用

go语言---传值和传引用 https://blog.csdn.net/cyk2396/article/details/78893828 1.定义: b = a; b.modify(); 如果b的修改不会改变a的值,那么是传值:否则,是传引用 2.golang中大多数是传值的,有: 基本类型:byte,int,bool,string 复合类型:数组,数组切片,结构体,map,channnel 3.数组: 3.1 传值 func main() { var array = [3]int{0, 1,

PHP传值和传引用、传地址的区别

传值,   是把实参的值赋值给行参   那么对行参的修改,不会影响实参的值 传地址   是传值的一种特殊方式,只是他传递的是地址,不是普通的如int   那么传地址以后,实参和行参都指向同一个对象 传引用   真正的以地址的方式传递参数   传递以后,行参和实参都是同一个对象,只是他们名字不同而已   对行参的修改将影响实参的值 仅讨论一下值传递和引用:   所谓值传递,就是说仅将对象的值传递给目标对象,就相当于copy:系统将为目标对象重新开辟一个完全相同的内存空间.   所谓引用,就是说将对

delphi中move函数的正确理解(const和var一样,都是传地址,所以Move是传地址,而恰恰不是传值)太精彩了 good

我们能看到以下代码var pSource,pDest:PChar;     len: integer;.......................//一些代码Move(pSource,pDest,len); //错误Move(pSource^,pDest^,len); //正确看起来确实好像是传值,而不是传地址,但是各位别忘了,这不是C,C++,而是DelphiObject Pascal,所以,绝不能从函数调用的方法判断是传值还是串地址!!必须看函数的定义,只有定义才能说明是传值还是传地址,再

传值和传地址调用

1.原理 传值调用:对形参进行函数变化 传地址调用:对实参进行函数变化 2.实例 #include<iostream>using namespace std;void exchange(int x, int y){             //传入形参    int temp = x;                       //在main函数中x=3,y=4    x = y;    y = temp;    printf("x=%d,y=%d\n", x, y);}

C/C++中传值和传地址(引用)

C/C++中参数传递有两种方式,传值或传地址(传引用),通常我们要在被调用函数中改变一个变量的值就需要传地址调用方式,例如: void swap_by_value(int a, int b) { int temp; temp = a; a = b; b = temp; } void swap_by_ptr(int* pa, int* pb) { int temp; temp = *pa; *pa = *pb; *pb = temp; } int main(int argc, char* argv

Go语言的传参和传引用[转]

目录[-] 传参和传引用的问题 传slice不是传引用! 什么叫传引用? 为什么传slice不是传引用? 为什么很多人误以为slice是传引用呢? 传指针和传引用是等价的吗? 所有类型的函数参数都是传值的! 那Go语言有传引用的说法吗? 什么是引用类型, 和指针有何区别/联系 ? 总结 传参和传引用的问题 很多非官方的文档和教材(包括一些已经出版的图书), 对Go语言的传参和引用的讲解 都有很多问题. 导致众多Go语言新手对Go的函数参数传参有很多误解. 而传参和传引用是编程语言的根本问题, 如