C/C++语言中的函数参数传参三种对比

学了很长时间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);(自我感觉:传的是常量区的值)
}
时间: 2024-10-05 08:32:12

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

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

原文:http://blog.sina.com.cn/s/blog_6f6b4c3c0100nxx8.html 在网页中JS函数自动执行常用三种方法 在网页中JS函数自动执行常用三种方法 在HTML中的Head区域中,有如下函数: <SCRIPT   LANGUAGE="JavaScript">   functionn MyAutoRun() {   //以下是您的函数的代码,请自行修改先! alert("函数自动执行哦!");   } </SCR

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

在网页中JS函数自动执行常用三种方法 在HTML中的Head区域中,有如下函数: <SCRIPT   LANGUAGE="JavaScript">   functionn MyAutoRun() {   //以下是您的函数的代码,请自行修改先! alert("函数自动执行哦!");   }  </SCRIPT> 下面,我们就针对上面的函数,让其在网页载入的时候自动运行! ①第一种方法 将如上代码改为: <SCRIPT   LANGUAG

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

传参方法 ## 函数 extern void f2 ( const char ** ccc ); const char ch = 'X'; char * ch_ptr; const char ** ch_pptr = &ch_ptr; // This is not allowed, because... ## 传参 f2(ch_ptr) ## 如果遇到报错 f2(const_cast<const char**>(ch_ptr)); 参考 const char * vs. const c

PHP 类中给函数参数传自定义函数

class klass{ public function index(){ $names = array('firstname' => "Baba", 'lastname' => "O'Riley"); array_walk($names, array(__CLASS__, 'escape_data')); foreach ($names as $name) { print "$name\n"; } } public function

C++(函数参数传参的本质解析)

在默认情况下,变量只能以值传递的方式传递给函数.这句话的意思是:被传递到函数的只是变量的值,永远不是变量的本身. 例如: void changeVar(int myVar,int newValue) { myVar=newValue; } int main() { int myNum=20; changeVar(myNum,90); std::cout<<myNum<<endl; return 0; } 结果:20 在本例中main函数调用函数changeVar(int myVar

C语言中的可变参数函数 三个点“…”printf( const char* format, ...)

第一篇 C语言编程中有时会遇到一些参数个数可变的函数,例如printf()函数,其函数原型为: int printf( const char* format, ...); 它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变的(用三个点“…”做参数占位符),实际调用时可以有以下的形式: printf("%d",i); printf("%s",s); printf("the number is %d ,string is:%s",

C语言中结构体参数变量的传递

c语言  结构体  函数  参数  传递 一.前言 本文中的程序实现对员工信息结构体字段赋值并打印出来的功能.该结构体的定义如下: // 员工信息结构体 typedef struct {        INT8       szEmployeeName[100];     // 员工姓名        UINT16  iEmployeeAge;                    // 员工年龄        UINT32  iEmployeeNo;                      

C语言中的函数以及#include的补充说明

C语言中的函数: 函数的定义,就是一个封装的代码段,每个函数能实现不同的功能 定义函数的目的:将一个常用的共功能封装起来,方便以后调用 什么情况下需要定义函数:添加一个常用的新功能 定义函数的格式: 返回值类型 函数名(形式参数列表) { 函数体: } 形参跟实参: 形式参数:定义函数时函数名后面中的参数,简称形参 实际参数:调用函数式传入的具体数据,简称实参 实参个数必须等于形参个数 函数体内部不能定义和形参一样的变量 如果是基本数据类型作为函数形参,纯粹是值传递,修改函数内部形参的值,并不会

c语言中的函数

函数注意事项在设计中:函数在设计的时候应该尽可能的单一出口或者单一入口,因为它可以让我们更加的容易读取和有关功能的分类. 1.函数的定义:函数一块代码,接受一个或者多个参数,做一件事情,并且返回0个或者多个值. 可以类比:成为数学中的函数,我们输入多个参数并且将会输出相对应的值,这其中的过程就像我们数学中的函数里面处理的过程. 2.函数定义: 返回类型 函数名 (参数,--)  //函数头 { //函数体 } eg:int sum (int first, int second) { return