C++的函数的参数调用是传值方式。

想要改变传值调用,有引用和指针两种方式。其中,引用的实现机理也是通过一个指针,但是具体和指针传值的方式又不一样。具体见:C++中的指针与引用

对于指针传值,其实实际上也是一个值传递,只是这个值是地址。所以在函数中改变*p的值,相应的调用函数的值也会改变。但是最近在做一点数据结构方面的东西,发现总是会出现以下错误。

struct list
{ int value;
list *next;
} void ListInsert(int x,list *head)
{
temp=new list;
temp->value=x;
temp->next=0;
if(head==0)
head=temp;
else {
head->next=temp;
}
}

这段代码主要是链表在一个指定的节点后面进行插入。但是这么做的话,如果链表为空,那永远插入不进去节点。

原因是head=temp这一句。在函数里面,其实编译器也是吧head的地址传到了栈里面,地址head只是一个函数的局部变量,这个插入函数改变了head的地址,对于主函数的head是没有影响的。所以,总结来说,函数调用,实际上参数的传递都是值传递。

要解决这个问题,可以return head;

版权声明:本文为博主原创文章,未经博主允许不得转载。

C++函数传值调用的更多相关文章

  1. Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数

    Python第七天   函数  函数参数   函数里的变量   函数返回值  多类型传值     函数递归调用   匿名函数   内置函数 目录 Pycharm使用技巧(转载) Python第一天   ...

  2. C++函数的传值调用&指针调用&引用调用

    目录 传值调用 指针调用 引用调用 传值调用 该方法把参数的实际值复制给函数的形式参数.在这种情况下,修改函数内的形式参数对实际参数没有影响. #include<iostream> usi ...

  3. php传值调用和传值调用和变量函数

    php传值调用和传值调用和变量函数 代码 <?php //传值调用,$m的值不改变 function text($i){ $i = 'Clive'; echo $i; } text(123); ...

  4. python 函数的调用 和执行 小知识

    1.符号表 执行一个函数会引入一个用于函数的局部变量的新符号表. 更确切地说, 函数中的所有的赋值都是将值存储在局部符号表: 而变量引用首先查找局部符号表, 然后是上层函数的局部符号表, 然后是全局符 ...

  5. [java学习笔记]java语言基础概述之函数的定义和使用&函数传值问题

    1.函数 1.什么是函数? 定义在类中的具有特定功能的一段独立小程序. 函数也叫做方法 2.函数的格式 修饰符   返回值类型    函数名(参数类型  形式参数1, 参数类型  形式参数2-) { ...

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

    传值调用和传引用调用是几乎所有主流语言都会涉及到的问题,下面我谈谈我对C#中传值调用和传引用调用的理解. 1. 一般对C#中传值调用和传引用调用的理解 如果传递的参数是基元类型(int,float等) ...

  7. day11(函数参数,函数对象,打散机制,函数嵌套调用)

    一,复习 # 什么是函数:具体特定功能的代码块 - 特定功能代码块作为一个整体,并给该整体命名,就是函数 # 函数的优点: # 1.减少代码的冗余 # 2.结构清晰,可读性强 # 3.具有复用性,开发 ...

  8. Python3学习笔记12-定义函数及调用

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段,能提高应用的模块性,和代码的重复利用率 Python提供了许多内建函数,比如print().也可以自己创建函数,这被叫做用户自定义函数 ...

  9. C/C++:函数的调用约定(Calling Convention)和名称修饰(Decorated Name)以及两者不匹配引起的问题

    转自:http://blog.csdn.net/zskof/article/details/3475182 注:C++有着与C不同的名称修饰,主要是为了解决重载(overload):调用约定则影响函数 ...

随机推荐

  1. 泛型、注解、log4j

    泛型.注解.log4j 泛型:将运行阶段的类型错误提前到编译阶段. 声明泛型必须两端的一致,要么左面有,要么右边有,两边都有的两边必须一致. 泛型方法: static 之后 返回类型之前进行声明 泛型 ...

  2. CRM odata方法 js容易出现的错误,大小写区分 Value Id

    Id Value  注意大小写,I大写,V大写,typeResults.result[0].yt_category.Value; 否则会报 错,Result.yt_businessunit_terri ...

  3. ajax相关

    Javascript·部分: <script language="javascript" type="text/javascript" src=" ...

  4. linux新建磁盘并分区

    先在虚拟机上添加一块硬盘. 查看磁盘分区:sdb还没有分配 新建一个100M的分区:再查看,发现新建成功了. 再查看fdisk -l ******ext4格式不支持.就使用了ext2进行格式化了. m ...

  5. MySqL触发器以及常用转换函数注意事项

    1,触发器(http://www.cnblogs.com/zzwlovegfj/archive/2012/07/04/2576989.html)       1.MYSQL中触发器中不能对本表进行 i ...

  6. 修改host文件的P处理

    notepad C:\WINDOWS\system32\drivers\etc\hosts 用文档创建hosts文件,添加上面代码.把文件后缀修改为 .bat 就不用每次很麻烦的查找host文件了.

  7. Moutain Tai notes

    rest 40shaxian 18 drumsticks  13零食 11.5+21车费5门票62大衣10面14 > 194.5 notes :::: 岗位职责:1.基于Drupal系统的产品功 ...

  8. 【Chromium中文文档】进程模型

    进程模型 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/Process_ ...

  9. [方法] ubuntu12.04开启root账户

    ubuntu 12.04使用LightDM显示管理器,默认禁止root账户登录. 通过修改/etc/lightdm/lightdm.con文件可以打开root登录权限. 方法很简单,只要在lightd ...

  10. 一个SysLog实现

    http://www.ice.com/java/syslog/index.shtml http://alvinalexander.com/servlets