函数 传值调用 指针调用 引用调用

#include <iostream>
using namespace std;

int max(int num1, int num2);
void swap(int *x, int *y);
void swap(int &x, int &y);

int main(){
    cout << "hello world" << endl;
    int num1 = 100;
    int num2 = 200;

    int v_max = max(num1, num2);
    cout << v_max << endl;

    //cout << "before swap " << num1 << " " << num2 << endl;
    //swap(&num1, &num2);
    //cout << "after swap " << num1 << " " << num2 << endl;

    cout << "before swap " << num1 << " " << num2 << endl;
    swap(num1, num2);
    cout << "after swap " << num1 << " " << num2 << endl;

}

int max(int num1, int num2)
{

    if (num1 > num2)
        return num1;
    else
        return num2;
} 

void swap(int *x, int *y)
{
    int temp;
    temp = *x; /*保存指针*/
    *x = *y;
    *y = temp;

    return;
}

void swap(int &x, int &y)
{
    int tmp;
    tmp = x;
    x = y;
    y = tmp;

    return;
}
时间: 2024-11-08 23:56:47

函数 传值调用 指针调用 引用调用的相关文章

深刻理解C#的传值调用和传引用调用

传值调用和传引用调用是几乎所有主流语言都会涉及到的问题,下面我谈谈我对C#中传值调用和传引用调用的理解. 1. 一般对C#中传值调用和传引用调用的理解 如果传递的参数是基元类型(int,float等)或结构体(struct),那么就是传值调用. 如果传递的参数是类(class)那么就是传引用调用. 如果传递的参数前有ref或者out关键字,那么就是传引用调用. 验证示例的代码如下: view sourceprint? 01    using System; 02 03    public cla

指针的引用——在函数中的巧妙应用

前面有一篇文章讲了指针与引用.并且还提到不能定义指向引用的指针(因为引用不是对象,没有实际的地址).那么,能否定义指针的引用呢?答案是肯定的,因为指针本身就是一个对象.即然是对象,就能定义一个引用邦定该对象.先来看看指针的引用的用法: 以int类型为例如下: void ReferencePointer() { int i = 5; // 变量i int* p = &i; // 指针p,指向变量i int*& pr = p; // 指针的引用,与p指向同一个变量i cout <<

(C/C++)区别:数组与指针,指针与引用

1.数组跟指针的区别 数组要么在静态存储区被创建(如全局数组),要么在栈上被创建.数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变. 指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存.指针远比数组灵活,但也更危险. 数组和指针特点的简单比较: 数组 指针 保存数据 保存地址 直接访问数据 间接访问数据,先取得指针的内容,然后以它为地址取得数据 用于存储数目固定且类型相同的数据 通常用于动态数据结构 编译器自动分配和删除

为什么基类指针和引用可以指向派生类对象,但是反过来不行?

为什么基类指针和引用可以指向派生类对象,但是反过来不行? 基类指针和引用 BaseClass *pbase = NULL; DerivedClass dclass; pbase = & dclass; 基类指针和引用可以指向派生类对象,但是无法使用不存在于基类只存在于派生类的元素.(所以我们需要虚函数和纯虚函数) 原因是这样的: 在内存中,一个基类类型的指针是覆盖N个单位长度的内存空间. 当其指向派生类的时候,由于派生类元素在内存中堆放是:前N个是基类的元素,N之后的是派生类的元素. 于是基类的

调用函数时传指针注意问题

指针是C/C++的强大工具,但也是最容易出错的地方. C++在函数调用时支持三种方式:赋值传递,引用传递,指针传递. 1.赋值传递是在函数调用栈内创建临时对象,并将实参对象复制到临时对象,函数内部只能操作实参对象的副本.这种方式对于基本类型倒无所谓,但是对于庞大的类对象,则会带来很大的调用代价. 2.引用传递是通过实参对象的别名来引用实参对象,并不将实参对象进行拷贝,函数内部可以直接操作实参对象,因此它的优点是高效,适合传递大型对象,同时这种方式也可以用作从函数返回数据的方式,它的缺点就是实参对

C++调用成员函数需要this指针的情况

1.虚成员函数,因为需要this指针寻找虚表指针 2.成员函数中对数据成员进行了操作 #include "stdafx.h" #include <iostream> #include <typeinfo> using namespace std; class A { public: virtual void foo() { cout<<"A foo"<<endl; } void pp() { cout<<&

让类成员函数指针成为可调用对象

类成员函数指针实践上是一个指针类型,不可直接通过调用运算符()作为可调用对象调用,一般调用该类成员函数指针需要指定该指针对应的对象. 一般情况下调用类成员函数指针: // a.h #ifndef A_H #define A_H #include <iostream> using std::cout; using std::endl; class A{ public:     void print(); }; #endif // a.cpp #include "a.h" vo

Python Cookbook(第3版)中文版:15.12 将函数指针转换为可调用对象

15.12 将函数指针转换为可调用对象? 问题? 你已经获得了一个被编译函数的内存地址,想将它转换成一个Python可调用对象,这样的话你就可以将它作为一个扩展函数使用了. 解决方案? ctypes 模块可被用来创建包装任意内存地址的Python可调用对象.下面的例子演示了怎样获取C函数的原始.底层地址,以及如何将其转换为一个可调用对象: >>> import ctypes >>> lib = ctypes.cdll.LoadLibrary(None) >>

C++学习日记--关于值调用和引用调用

如果希望函数能够改变某变量的值,那么相应的形参一定要是引用调用参数.因此必须在参数类型后面加上“&”符号.传值调用形参只是一个局部变量.当一组数据需要多个函数处理时候,也要用引用调用. 到目前为止我们一直使用传值调用形参,函数调用里的相应的形参可以是一个变量,但函数只使用该变量的值,而且不能以任何方式改变这个变量.使用传值调用时,替代形参的只有实参的值.     对于一个输入函数,我们希望用变量(而不是变量值)来替代形参.---引用调用机制正是用来解决这类问题的.   借助引用调用形参,函数调用

【解惑】Java方法参数是引用调用还是值调用?

最近找实习,在笔试时候做了下面这道题:求下面代码的输出结果. public class MyClass { static void aMethod(StringBuffer sf1,StringBuffer sf2){ sf1.append(sf2); sf2=sf1; } public static void main(String[] args){ StringBuffer sf1=new StringBuffer("A"); StringBuffer sf2=new String