指针与引用与常规传递值c ++

num*_*l25 0 c visual-studio-2008 visual-studio visual-c++

请在回答之前阅读.我不希望你为我说明显的事.感谢:D

我试图区分指针和传递值.而且我认为我理解它们,但我读到的一个来源并不清楚,传递指针和传递值之间的区别是什么.考虑以下...

andy = 25;
fred = andy;
ted = &andy; 
Run Code Online (Sandbox Code Playgroud)

第一行将值25传递给andy.第二行将andy的值传递给fred.现在fred拥有值25.第三行传递给ted.现在ted保存了andy的内存地址,其值为25.现在看看下一个代码

andy = 25;
fred = andy;
ted = &andy; 
joe = *andy;
Run Code Online (Sandbox Code Playgroud)

上面的代码看起来就像第一个代码段,除了我们将指向andy的指针传递给了joe.现在,joe保持指针值为25.这几乎和刚刚做的一样(joe = andy).没有*

传递指针值与传递值相比有什么不同?

在我的解释中,似乎joe的指针值仍然受影响,如果后来我决定改变andy /的值,如果我只是通过值,它不会影响.Ť

据我所知,传递引用和传递指针之间的唯一区别是,一个保存地址,另一个保存该地址内的值.如果任何拥有该值引用的变量,它仍然会改变,决定改变它.如果是这种情况,通过引用传递和传递值的意义是什么.

这是我正在阅读的内容的链接

http://www.cplusplus.com/doc/tutorial/pointers/

多谢你们!!!

Car*_*rum 6

你所谈论的内容与传递引用或传值有关.这些术语仅指函数调用时参数的变化.规范的例子是swap()函数.这个功能:

void swap(int a, int b)
{
    int t = a;
    a = b;
    b = tmp;
}
Run Code Online (Sandbox Code Playgroud)

什么都不做; 如果调用它们,参数将不会被交换,因为它们是按值传递的.如果你通过引用传递(在C++中)或传递指针(在C或C++中),它将按照你想要的方式执行:

void swap(int *a, int *b)
{
    int t = *a;
    *a = *b;
    *b = t;
}
Run Code Online (Sandbox Code Playgroud)

或仅在C++中,

void swap(int &a, int &b)
{
    int t = a;
    a = b;
    b = a;
}
Run Code Online (Sandbox Code Playgroud)

pass-by-reference版本的优点是它可以保证获得良好的引用.第一个例子,如果你传递坏指针,将会崩溃你的程序.