- 浏览: 1588075 次
- 性别:
- 来自: 吉林
文章分类
- 全部博客 (624)
- C/C++ (33)
- Java (181)
- 网络相关 (7)
- 我爱篮球 (3)
- 也爱足球 (4)
- 杂谈 (1)
- 系统架构 (3)
- Web Service (14)
- Framework (3)
- 系统命令 (8)
- 管理平台相关 (8)
- 其它 (35)
- Websphere (1)
- Struts2 (24)
- Hibernate (16)
- Spring (23)
- javascript (20)
- jquery (23)
- html/css/div (28)
- 数据库 (40)
- JavaWeb (27)
- 设计模式 (2)
- 文档编写 (3)
- SVN (5)
- Ant (1)
- Maven (13)
- 软件项目管理 (8)
- AOP (1)
- kindeditor (1)
- JSON (2)
- Servlt/JSP (4)
- WordXML (2)
- XML (12)
- 面试相关 (7)
- Tomcat (11)
- 性能与调优 (29)
- 职业发展 (2)
- 操作系统 (7)
- AJAX (2)
- DWR (1)
- Eclipse (12)
- 持续集成 (3)
- 批处理命令 (1)
- Mozilla Rhino (2)
- 新鲜技术 (18)
- Apache mina (2)
- 底层技术 (18)
- Linux (22)
- 新鲜技术,IT历史 (1)
- 敏捷开发 (1)
- 版本控制 (5)
- 较火技术 (7)
- 集群 (2)
- Web前端 (13)
- 报表工具 (3)
- 网站架构 (5)
- 大数据 (8)
- 分布式存储 (5)
- 云计算 (8)
- TCP/IP协议 (1)
- 负载均衡 (3)
- 硬件 (1)
- 表现层技术 (3)
- Velocity (3)
- jvm (6)
- 并发编程 (10)
- hadoop (8)
- 数据结构和算法 (12)
- 计算机原理 (1)
- 测试驱动开发-TDD (3)
- 开发技巧 (1)
- 分词器 (1)
- 项目构建工具 (2)
- JMX (4)
- RMI (1)
- 测试技术 (22)
- 网络完全 (1)
- Git (4)
- apache开源包 (4)
- Java常用 (1)
- mock (2)
- OSGi (2)
- MongoDB (1)
- JBPM (1)
- Storm (3)
- mysql (2)
- telnet (1)
- 正则表达式 (1)
- bootstrap (4)
- Apache ActiveMQ (1)
- redis (9)
- Nginx (2)
- rsync+inotify文件同步 (2)
- testng (1)
- 原型设计工具 (1)
- 工程能力 (1)
- 风险控制 (3)
- ibatis (1)
- 分布式 (4)
- 安全技术 (1)
- 计算机基础 (4)
- 消息中间件 (1)
- UML (2)
最新评论
-
u012236967:
java命令执行jar包(里面的main函数)的方式(包括依赖其它的jar包问题) -
世界尽头没有你:
Selenium自动化测试从入门到精通(Java版)百度网盘地 ...
自动化测试工具 Selenium WebDriver 入门教程(针对主流浏览器) -
小小西芹菜:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
dwr实现Reverse Ajax推送技术的三种方式 -
hellozhouqiao:
楼主,请教一点问题.现在我们需要在excel 的页脚里面加上图 ...
FreeMaker + xml 导出word(处理目录,图片和页眉页脚问题) -
乱在长安:
使用Timer会有各种各样的问题好嘛?!书上推荐使用Sched ...
DelayQueue (ScheduledThreadPoolExecutor调度的实现)
#include "stdio.h"
#include "iostream.h"
void DeliByValue(int x);
void DeliByReference(int &x);
void DeliByPointer(int *x);
void main()
{
int number=0;
DeliByValue(number);
cout<<number<<endl;
number=0;//重新归0
DeliByReference(number);
cout<<number<<endl;
number=0;//重新归0
DeliByPointer(&number);
cout<<number<<endl;
}
void DeliByValue(int x)
{
x = x+10;
}
void DeliByReference(int &x)
{
x=x+10;
}
void DeliByPointer(int *x)
{
(*x) = (*x)+10;
}
运行结果如下:
0
10
10
通过这个程序进行的比较可以看出,在书写值传递,引用传递,指针传递这三个函数和调用这三个函数的区别。
林锐在《高质量c++编程指南》中对此有介绍:
附上:
引用是C++中的概念,初学者容易把引用和指针混淆一起。一下程序中,n是m的一个引用(reference),m是被引用物(referent)。
int m;
int &n = m;
n 相当于m的别名(绰号),对n的任何操作就是对m的操作。例如有人名叫王小毛,他的绰号是“三毛”。说“三毛”怎么怎么的,其实就是对王小毛说三道四。所以n既不是m的拷贝,也不是指向m的指针,其实n就是m它自己。
引用的一些规则如下:
(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。
(2)不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL)。
(3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。
以下示例程序中,k被初始化为i的引用。语句k = j并不能将k修改成为j的引用,只是把k的值改变成为6。由于k是i的引用,所以i的值也变成了6。
int i = 5;
int j = 6;
int &k = i;
k = j; // k
和i的值都变成了6;
上面的程序看起来象在玩文字游戏,没有体现出引用的价值。引用的主要功能是传递函数的参数和返回值。C++语言中,函数的参数和返回值的传递方式有三种:值传递、指针传递和引用传递。
以下是“值传递”的示例程序。由于Func1函数体内的x是外部变量n的一份拷贝,改变x的值不会影响n, 所以n的值仍然是0。
void Func1(int x)
{
x = x + 10;
}
…
int n = 0;
Func1(n);
cout << “n = ” << n << endl; // n = 0
以下是“指针传递”的示例程序。由于Func2函数体内的x是指向外部变量n的指针,改变该指针的内容将导致n的值改变,所以n的值成为10。
void Func2(int *x)
{
(* x) = (* x) + 10;
}
…
int n = 0;
Func2(&n);
cout << “n = ” &t;< n << endl; // n = 10
以下是“引用传递”的示例程序。由于Func3函数体内的x是外部变量n的引用,x和n是同一个东西,改变x等于改变n,所以n的值成为10。
void Func3(int &x)
{
x = x + 10;
}
…
int n = 0;
Func3(n);
cout << “n = ” << n << endl; // n = 10
//
好好理解“值传递”“指针传递”“引用传递”(zbf)
对比上述三个示例程序,会发现“引用传递”的性质象“指针传递”,而书写方式象“值传递”。实际上“引用”可以做的任何事情“指针”也都能够做,为什么还要“引用”这东西?
答案是“用适当的工具做恰如其分的工作”。
指针能够毫无约束地操作内存中的如何东西,尽管指针功能强大,但是非常危险。就象一把刀,它可以用来砍树、裁纸、修指甲、理发等等,谁敢这样用?
如果的确只需要借用一下某个对象的“别名”,那么就用“引用”,而不要用“指针”,以免发生意外。比如说,某人需要一份证明,本来在文件上盖上公章的印子就行了,如果把取公章的钥匙交给他,那么他就获得了不该有的权利
发表评论
-
COM(Component Object Model)组件介绍
2013-01-15 17:38 1519COM component(COM组件)是微软公司为了计算机 ... -
scanf的用法
2012-05-31 23:37 1465scanf()函数的用法和实 ... -
定义计算变量相对于结构体偏移量的宏
2012-05-30 22:42 2819#include <stdio.h> #incl ... -
C语言一些有用的宏定义
2012-05-30 22:36 1768C语言宏定义技巧(常用宏定义) 写好C语 ... -
C语言const
2012-05-30 14:35 1261原文地址:http://hi.baidu. ... -
C语言void指针
2012-05-29 09:50 13621.概述 本文将对void关键字的深刻含义进行解说,并 ... -
C语言中#line 宏说明
2012-05-28 09:38 1845c语言里有个很少用到的宏 #line,这个宏通常是和__LIN ... -
C语言中宏的一些特别用法
2012-05-28 09:36 1726转载 C语言中如何使用宏C(和C++)中的宏(Macro)属 ... -
C语言编译执行的全过程
2012-05-28 09:13 1238编译,编译程序读取源程序(字符流),对之进行词法和语法的分 ... -
C++新型头文件与名称空间的作用
2012-05-25 09:06 18701.20 新型头文件与名字 ... -
程序在内存中运行的奥秘
2010-07-01 12:18 1843内存管理是操作系统的核心功能,无论对于开发者还是系统管理员内存 ... -
堆和栈的区别
2010-06-29 10:56 1650栈是随函数被调用时分 ... -
原码,补码,反码(针对byte(128) = -128的问题)
2010-06-25 16:40 4139int a = 128; byte b = (byte)a; ... -
链表常见笔试题
2010-06-25 11:22 3467链表的一些常见笔试面试问题总结及代码 ... -
C与C++中struct的区别,以及C++中struct与Class的区别
2010-06-25 10:44 4197C中struct只可以放成员变量,没有访问权限限制,外部可以访 ... -
C++中的inline用法总结
2010-05-26 22:26 18810inline函数的作用 ... -
C++枚举类型用途及定义详解
2010-05-26 21:14 4579C++编程语言作为一种功 ... -
C++ Template 中的typename、class关键字区别
2010-05-19 19:27 3323在c++Template中很多地 ... -
C++与Java比较(转)
2010-04-30 23:02 4461“作为一名C++程序员,我们早已掌握了面向对象程序设计的基本概 ... -
几款常见C++编译器的比较
2010-04-30 22:58 5727另外,就我个人的一点点经验来看,vs 2005中的C++编译器 ...
相关推荐
总结:在实际使用中,值传递一方面会占用内存空间,内置类型还好(int等),如果是类(class)类型,赋值可能会是很大一笔...而对于指针传递,则在涉及数组的情况下使用较多,因为指针本身会给代码增加复杂性,难维护性
C++语言中,函数的参数和返回值的传递方式有三种:值传递、指针传递和引用传递。 值传递 void Func1(int x){x = x + 10;} int n = 0; Func1(n); cout “n = ” ; // n = 0 指针传递 void Func2(int *x){(* x)...
C++语言中,函数的参数传递方式有三种:值传递、指针传递和引用传递。 值传递是将参数的值复制一份传递给函数,函数对参数的修改不会影响外部变量。例如,void Func1(int x){x = x + 10;}这里,x是外部变量n的一份...
在函数参数传递方面,指针传递参数实际上是值传递的一种形式,传递的是变量的地址值。这意味着在函数内部对指针的操作不会影响到原始变量,除非通过指针间接修改它所指向的对象。如果想要通过指针参数改变主调函数中...
本文将深入探讨Java与C++这两种广泛使用的编程语言中参数传递的方式,包括值传递、引用传递以及C++中的指针传递,并通过具体的代码示例来帮助理解这些概念。 #### 值传递 值传递是最简单的参数传递方式之一,它指...
C++ 与C#之间的指针参数传递,实现无限量数据的传递,轻松无压力,方便在C++里面获取或者从C#传递数据到C++的动态库调用内。
根据给定的文件信息,我们将深入探讨C++中的三种主要参数传递方式:值传递、指针传递和引用传递,并分析它们的特点、效率以及适用场景。 ### 值传递 值传递是最直接的参数传递方式,当调用函数时,会将实参的值...
C++则提供了值传递、引用传递和指针传递,让程序员可以根据需求选择最适合的方式来操作函数参数。值传递确保了函数的不可变性,引用传递和指针传递则提供了更高的灵活性,允许直接修改原始对象。在编写代码时,理解...
C++中的指针参数传递是一种常见的编程技术,但是许多开发者对其机理不甚了解,本文将深入剖析C++指针参数传递的内存机理,解决开发者们长期以来对函数指针参数传递的误解。 函数指针参数传递的机理 ---------------...
如果我们希望函数外部也能感知到这个变化,简单的指针传递是不够的,因为函数内的修改只影响局部变量,不会影响到外部的原始指针。此时,使用指针引用就显得尤为重要了。 例如,如果我们想要在函数`func1`中更新`...
"C++中引用传递与指针传递的区别" C++中引用传递与指针传递是两个不同的概念,它们都是C++编程语言中的基本概念,但是它们之间存在着明显的区别。 首先,指针是变量,独立的,它可以被改变的,包括指针变量的值...
C/C++中多维数组指针作为函数参数传递程序 在 C++ 中,多维数组指针作为函数参数传递是非常常见的编程技术。本文将详细介绍如何在 C/C++ 中将多维数组指针作为函数参数传递,並对相关知识点进行详细解释。 多维...
### C++中的引用传递 在C++编程语言中,引用是一种非常重要的概念,它提供了一种灵活的方式来处理数据。与指针不同,引用是不可重新绑定的,并且必须在定义时初始化。引用传递通常用于避免复制大型对象的成本,或者...
在C++编程语言中,指针和引用是两种非常重要的概念,它们都允许我们间接访问内存中的对象。本文将深入探讨这两个主题,并通过实例来对比它们的使用方法和特性。 首先,指针是C++中的一种特殊类型,它存储的是一个...
指针传递参数本质上是值传递的方式,它所传递的是一个地址值。在值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,即在栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本...
在C++编程语言中,高阶指针和引用是两种重要的高级特性,它们极大地扩展了对内存和对象的操纵能力。本实验通过两个实例详细介绍了这两种概念及其在实际编程中的应用。 首先,我们来看第一个实例,它涉及到了二级...
总的来说,C++和C#在数据传递上都支持值传递和引用传递,但C++需要明确选择引用或指针来实现引用传递,而C#总是进行引用传递。数组和列表在两者的处理方式上有共同之处,但C++的`std::vector`更强调内存管理和性能...
本话题聚焦于C#如何调用C++生成的DLL,并且接收返回的结构体引用或结构体指针,从而获取和处理多个值。下面我们将详细讨论这一过程。 首先,我们需要理解C++和C#之间数据类型的映射。在C++中,结构体可以直接作为...