所谓的传值和引用

一直反反复复总是记不太清

今天总结:

如果你在调用的时候用了引用,对应的函数参数必须有*

如果你在调用的时候没有&,则如果你传的是指针,则对应函数要有参数要有*,如果想把参数本身传过去,要在函数定义的参数处加&

对于字符串而言和对于整型而言 cout<<a不一样的

void fun(int *a)
{
cout<<a+1<<endl;
}
int main()
{
int a=3;
fun(&a);
}

输出的是一个地址,参数是指针

void fun(int *a)
{
cout<<*a+1<<endl;//取内容
}
int main()
{
int a=3;
fun(&a);
}

。。。。。。。。。。。。。。。。。

void fun(int &a)
{
cout<<a+1<<endl;
}
int main()
{
int a=3;
fun(a);
}//4

参数是常量本身

。。。。。。。。。。。。。。。

void fun(char *a)
{
cout<<a+1<<endl;
}
int main()
{
char *str="fdsfds";
fun(str);
}//dsfds

...................

void fun(char *&a)
{
cout<<a+1<<endl;
}
int main()
{
char *str="fdsfds";
fun(str);
}一样的

。。。。。。。。。。。。。

void fun(char **a)
{
cout<<a+1<<endl;
}
int main()
{
char *str="fdsfds";
fun(&str);
}//一个地址

。。。。。。。。。。。。。。。。

void fun(char **a)
{
cout<<*a+1<<endl;
}
int main()
{
char *str="fdsfds";
fun(&str);
}//dsfds

时间: 2024-12-28 21:59:30

所谓的传值和引用的相关文章

Js 赋值传值和引用传址

赋值传值和引用传址 在JavaScript中基本数据类型都是赋值传值,复合数据类型都是引用传址(传地址) ? 基本数据类型的变量名和数据是直接存在"快速内存"(栈内存)中,而复合数据类型(对象和数组)的存储分两个部分:实际数据存在"慢速内存"(堆内存)中,栈内存中只存变量名和数据在堆内存中的位置(地址)

Python中的传值和引用

我写这个主要是给自己看,内容也就是便于自己理解,可能会不正确,但目前来看代码测试的结果是对的. python中一切皆对象. 当我们赋值时: a = 1 其实是先创建了一个整数常量1(也是一个对象,且已经为它分配了内存),然后将它的地址传递给了a 当我们将a的值赋值给b时: b = a ,其实也是将1的地址传递给了b 接下来查看a和b的地址 id(a) id(b) 会发现两者相同 所以如果执行 a = 2 ,a的地址就会改变,再执行 a = 1 之后,a的地址又会变成原来的值 而当操作自己定义的c

拷贝传值和引用传值

1.拷贝传值:基本数据类型都是“拷贝传值”. 拷贝传值,就是将一个变量的值“拷贝”一份,传给了另一个变量. 拷贝传值中,两个变量之间没有任何联系,修改其中一个变量的值,另一个不会改变. 这两个变量之间,是相互独立的,没有任何联系.        基本数据类型存在“快速内存”“栈内存”中的.因为,基本数据类型只有一个变量名和一个变量值 2.引用传址:复合数据类型都是“引用传地址” 复合数据类型的存储分两步: (1)将变量名和数据地址存在“快速内存”“栈内存”中. (2)具体的数据存在“慢速内存”“

js学习笔记&lt;拷贝传值,引用传址和匿名函数&gt;

拷贝传值:把一个变量的值拷贝一份,传给了另外一个变量拷贝传值中,两个变量之间没有任何联系,修改其中一个一个变量的值,原来的变量不变. 例: var arr1 = ["张三",24,"大专"]; //定义一个二维数组:   var arr2 = arr1;//将arr1的地址传给arr2,(不传递实际参数)   arr1[1] = 30;//改变arr1中的24等于30:   alert(arr2[1]);//输出arr2[1]; 引用传址: 例: var arr =

Python参数传递(传值&amp;传引用)

# 测试参数是传值还是传引用def test(arg): print("test before") print(id(arg)) arg[1]=30 # 测试可变对象 # arg[3][2] = 16 # 测试嵌套类型 # arg = list(range(5)) print("test after") print(id(arg)) return argchange_loc = 1if change_loc == 1: # 传入可变对象 my_list = list

关于Java传值&amp;传引用的一道题

<pre name="code" class="java">public class JavaTestDemo1 { public static void main(String[] args) { Integer v1 = new Integer(1); Integer v2 = v1; doSomething(v2); System.out.println(v2); System.out.println(v1 == v2); System.out.p

Java方法中传值和引用传递的问题(转)

说明:标题其实说法是错误的.Java中只有值传递,没有引用传递. ... ... //定义了一个改变参数值的函数 public static void changeValue(int x) { x = x *2; } ... ... //调用该函数 int num = 5; System.out.println(num); changeValue(num); System.out.println(num); ... ... 调用函数changeValue()前后num的值都没有改变. 值传递的过

main.m(传值与引用)

#import <Foundation/Foundation.h> #import "Observer.h" #import "Person.h" #import "Computer.h" int main(int argc, const char * argv[]) { @autoreleasepool { /* Person *per = [[Person alloc]init]; // Computer *computer1 =

java中函数传值与引用问题

从C++转java,在使用函数传对象时,碰到一点问题,今天特意验证了一下: public class App { public static void doubleTest(double d) { d=8.0; System.out.println( "[INNER doubleTest]double:"+d); } public static void DoubleTest(Double dd) { dd=8.0; System.out.println( "[INNER D