学了很长时间C/C++有时指针方面还是有点乱。

希望大神发现如果下面有不对的地方请指出。我发现之所以我乱就是因为中文表述不准确的问题,比如 ,地址值和地址

#include <iostream>
#include <string> using namespace std; void swap1(string* str1,string* str2){// 1.对象指针作为函数参数 //影响实参
cout<<&str1<<" "<<&str2<<endl;//打印地址值
string temp = *str1; *str1=*str2; *str2=temp;
cout<<"str1="<<*str1<<"\tstr2="<<*str2<<endl;//打印值
} void swap2(string &str1,string &str2){//2.引用作为函数参数 //影响实参 形参和实参是同一个对象 传引用是不开辟内存空间的 所以比传指针好其实传的就是实参本身
cout<<&str1<<" "<<&str2<<endl;//打印地址值
string temp = str1; str1=str2; str2=temp;
cout<<"str1="<<str1<<"\t str2="<<str2<<endl;//打印值
} void swap3(string str1,string str2){//3.对象作为函数参数 //传的是值 不影响实参
cout<<&str1<<" "<<&str2<<endl;//打印地址值
string temp = str1; str1=str2; str2=temp;
cout<<"str1="<<str1<<"\tstr2="<<str2<<endl;//打印值
} void main(){
string str1("现在"); string str2("过去");//值存在常量池 cout<<&str1<<" "<<&str2<<endl;//地址和调用swap1打印的地址不一样
swap1(&str1,&str2);//使用传 地址值 的方式传递str1和str2的地址值 &取地址(自我感觉:传的是栈空间指向常量区的地址)
//------------------------------------
//cout<<&str1<<" "<<&str2<<endl;//地址和调用swap2打印的地址一样,说明就是同一个对象
//swap2(str1,str2);(自我感觉:传的栈空间的地址值)
//------------------------------------
//cout<<&str1<<" "<<&str2<<endl;//地址和调用swap3打印的地址不一样
//swap3(str1,str2);(自我感觉:传的是常量区的值)
}

C/C++语言中的函数参数传参三种对比的更多相关文章

  1. (转)在网页中JS函数自动执行常用三种方法

    原文:http://blog.sina.com.cn/s/blog_6f6b4c3c0100nxx8.html 在网页中JS函数自动执行常用三种方法 在网页中JS函数自动执行常用三种方法 在HTML中 ...

  2. 在网页中JS函数自动执行常用三种方法

    在网页中JS函数自动执行常用三种方法 在HTML中的Head区域中,有如下函数: <SCRIPT   LANGUAGE="JavaScript">   function ...

  3. char *与const char **函数参数传参问题

    传参方法 ## 函数 extern void f2 ( const char ** ccc ); const char ch = 'X'; char * ch_ptr; const char ** c ...

  4. vue之路由传参三种基本方式

    现有如下场景,点击父组件的li元素跳转到子组件中,并携带参数,便于子组件获取数据. 父组件中: <li v-for="article in articles" @click= ...

  5. 网页中JS函数自动执行常用三种方法

    (1)最简单的调用方式,直接写到html的body标签里面:        <body onload="myFunction()"></body>      ...

  6. C# 多线程传参 三种实例

    //using Thread to download files //1111111111111111 foreach (var str in listDownloadPdf) { //string ...

  7. C语言中的函数

    C语言中的函数 目录 概述——对函数的理解 C语言中函数的定义和声明 函数允许的参数类型 函数允许的返回类型 递归 概述 由于有些代码段在编写程序的时候经常会用到,此时我们为了减少代码文件的长度和增加 ...

  8. JS中给函数参数添加默认值(多看课程)

    JS中给函数参数添加默认值(多看课程) 一.总结 一句话总结:咋函数里面是可以很方便的获取调用函数的参数的,做个判断就好,应该有简便方法,看课程. 二.JS中给函数参数添加默认值 最近在Codewar ...

  9. C语言中的可变参数-printf的实现原理

    C语言中的可变参数-printf的实现原理 在C/C++中,对函数参数的扫描是从后向前的.C/C++的函数参数是通过压入堆栈的方式来给函数传参数的(堆栈是一种先进后出的数据结构),最先压入的参数最后出 ...

随机推荐

  1. 手势GestureDetector.OnGestureListener事件的调起

    @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionE ...

  2. Java 连接数据库及字符编码

    通过JDBC方式连接MYSQL数据库: public static Connection getConnection(){ String username="root" ; Str ...

  3. python学习 (三十一) python中的class

    1 python的类:   Python类都继承自object. __init__: 构造函数,如果不写,有一个默认的. __init__: 这个构造函数只能有一个,Python中不能有多个构造函数. ...

  4. 大白话系列之C#委托与事件讲解大结局

    声明:本系列非原创,因为太精彩才转载,如有侵权请通知删除,原文:http://www.cnblogs.com/wudiwushen/archive/2010/04/20/1698795.html 今天 ...

  5. Mybatis动态构建Sql(无实体类)

    MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑. 例如,sql语句where条件中,需要一些安全判断,例如按某一条件查询时如果传入的参数是空,此时查询 ...

  6. socket_udp客户端循环输入

    server--------------#!/usr/bin/env python # encoding: utf-8  # Date: 2018/6/7 from socket import * s ...

  7. DataFactory+MySQL数据构造

    前言:DataFactory是一种快速生产测试数据的可视化工具,是一种强大的数据生成器,该工具支持DB2.Oracle.Sybase.SQL Server数据库,支持ODBC连接方式,且通过ODBC连 ...

  8. Android SQLite最简单demo实现(增删查改)

    本来不太想写这篇博客的,但是看到网上的关于android数据库操作的博文都讲得很详细,对于像我这样的新手入门了解SQLite的基本操作有一定难度,所以我参考了网上的一些博客文章,并自己亲自摸索了一遍, ...

  9. leetcode477

    public class Solution { public int TotalHammingDistance(int[] nums) { , n = nums.Length; ; j < ; ...

  10. 学习 Python 编程的 19 个资源 (转)

    学习 Python 编程的 19 个资源 2018-01-07 数据与算法之美 编译:wzhvictor,英文:codecondo segmentfault.com/a/119000000418731 ...