c++;-指针和引用:一个简单的例子 我正在通过C++书籍/指南工作,但是指针和参考文献对我来说似乎有些模糊。这是我作为一名C#程序员和使用
foo(参考整数x)和bar(参考整数y) 我写了一小段代码来显示内存位置和内存位置值,但我不完全理解它们的含义,以及它们在什么上下文中c++;-指针和引用:一个简单的例子 我正在通过C++书籍/指南工作,但是指针和参考文献对我来说似乎有些模糊。这是我作为一名C#程序员和使用,c++,C++,foo(参考整数x)和bar(参考整数y) 我写了一小段代码来显示内存位置和内存位置值,但我不完全理解它们的含义,以及它们在什么上下文中 int main() { int i = 50; foo(&i); cout << "\n\n" ; foo(i); getchar(); return 0; } void foo(int& bar) // & refer { cout << "refer
int main()
{
int i = 50;
foo(&i);
cout << "\n\n" ;
foo(i);
getchar();
return 0;
}
void foo(int& bar) // & refer
{
cout << "refer";
cout << "\n&bar = " << &bar;
cout << "\nbar = " << bar;
}
void foo(int* bar)// * pointer
{
cout << "prefer";
cout << "\n&bar = " << &bar;
cout << "\nbar = " << bar;
}
在每种情况下,&和*意味着什么,以及它如何影响输出
当然,我已经在.h文件中添加了所有必要的方法
阅读部分答案后更新
int i(指针中的值,也称为直接指向变量)
- 有一个值=50
- 内存地址=0018FD04
- 具有int i内存地址=0018FD04的值
- 有自己的内存地址=0018FC30
foo(int&bar)
中传递的int i
它将具有inti
的内存地址,而不是包含50的新&bar
值
TL;DR
接收变量的“值”foo(intbar)
接收变量的“值”,如果更改,它将更改调用方法中的变量foo(int*bar)
接收变量的指针/内存地址foo(int&bar)
void foo(int& bar) // & refer
当您使用type&name
传递时,您是通过引用传递的,并且您传递的是C#的等效值ref
(或者out
,如果您没有给变量一个有意义的开始值)。即使您已经传递了一个值,对该值的更改(包括更改该值本身)也将反映在调用范围中
void foo(int* bar)// * pointer
当您使用type*name
传递对象时,您传递的是指向该对象的指针。但是,您正在将指针作为值传递,因此虽然您可以更改成员(在int
的情况下没有意义),但不能更改值(bar
)本身。与C#一样,这就像传递一个类
对象而不使用ref
/out
——重新分配不会反映在调用范围中
void foo(int* bar)// * pointer
检查代码中&
的用法
cout << "\n&bar = " << &bar;
cout想象一下我们有:
int* a; // This holds memory addresses
a = new int;
cout << a; // This will print the memory address of your new int
cout << *a; // This will print the value at the memory address a is holding
cout << &a; // This will print the memory address of the pointer variable.
int*a;//它保存内存地址
a=新整数;
cout好的,首先是指针:
void foo(int* bar)// * pointer
{
cout << "prefer";
cout << "\n&bar = " << &bar;
cout << "\nbar = " << bar;
}
在此上下文中,*条
将为50
(获取int指针指向的值)。
&bar
是所创建指针的地址(当然,指针本身也需要内存中的一个位置)。
bar
是指针指向的对象的地址(i
)
参考案例:
void foo(int& bar) // & refer
{
cout << "refer";
cout << "\n&bar = " << &bar;
cout << "\nbar = " << bar;
}
void foo(int&bar)//&参考
{
库特
我正在通过C++书籍/指南工作,但是指针和引用对我来说似乎有些模糊。
如果你尝试搜索,你会发现,但这是我的尝试
A是一个变量,通过指向它来告诉您在何处查找另一个变量。指针实际上只是一个与另一个变量内存中的地址相对应的数字。地址的示例是输出中的0018FC30和0018FD04
A是变量的别名(另一个名称)。如果您有一个变量A
,并且创建了对该变量的引用b
,b
将成为A
的替代名称。
引用的值不像指针那样是地址,而是引用的任何内容的值。
引用的有趣之处在于,当您复制或传递它们时,您没有复制实际值(这可能很昂贵),您只是复制名称
可观察到的主要区别是,您可以更改指针指向的内容(通过更改指针的值,因为它的值实际上只是一个地址),但您不能更改引用的内容(在某种程度上,它变成了引用的内容)
在每种情况下,&和*意味着什么,以及它如何影响输出
当您有一个变量a
时,表达式&a
的意思是“取a
的地址”。
这很有趣,因为如果你有一个变量的地址,你可以让一个指针指向它
而*a
或多或少可以被看作是逆运算,如果你有一个指针a
,*a
意味着“取这个指针指向的地址的值”
在任何有地址的地址上都可以使用<代码>和“<代码>”。甚至可以使用指针的地址来创建指针的指针!但是,只能在行为像指针的情况下使用<代码> >代码>,否则它将毫无意义。C++中的< p>默认是逐值的。因此,如果你有一个<代码> f(x x)
然后编译器将在每次调用函数时生成复制类X的代码。如果X很大(如数组、字符串、映射等),出于性能原因,您可能不需要复制。复制还意味着如果修改参数
void foo(int& bar) // & refer
{
cout << "refer";
cout << "\n&bar = " << &bar;
cout << "\nbar = " << bar;
}