指针和参考C ++

时间:2016-01-28 21:01:41

标签: c++ pointers reference

我目前正在课堂上学习指针和参考,这有点令人困惑。我们被分配了这个问题用于家庭作业,我想知道是否有人可以纠正我?

Problem

据我所知,到目前为止,*声明了一个指针,并且&申报参考?因此,如果将指针变量设置为等于引用,那么指针变量是否存储该地址的值?当你分配新的时,你将内存分配给一个变量,但事后我不确定。我从C ++读取信息,但我正在努力确保我确实知道如何应用这些信息。

谢谢

2 个答案:

答案 0 :(得分:1)

a(52)给出整数值52。

b(22)给出b整数值22。

c(a)给出c的整数值,意思是52。

在m的地址

&m(a),你有a的值,所以m与a的地址相同。

*x(&b)在x处,您可以指定b的地址值。

我会说你的作业是正确的。

答案 1 :(得分:0)

int a(52)声明一个值为52的int。

int b(22)声明一个值为22的int。

int c(a)声明一个值为a的int,所以52。

int &m(a)声明对int a的引用。由于a的值为52,因此m的值为52.但是,如果更改a的值,则m的值也会更改。例如:

int a = 52;
int &m(a);   // Value of m is 52

a = 40;      // Value of m is 40

int *x(&b)x的内存位置声明指针b。行为类似于上面的参考。由于b的值为22,因此取消引用x会得到b的值。如果更改了b,则取消引用x时返回的值也会更改,但地址x不会更改。例如

int b = 22;
int *x(&b);

std::cout << x;  // Some hex number, say 0x7fff79205a6c, which is the address x points to
std::cout << *x; // will print 22, since b is 22

b = 40;

std::cout << x;  // Some hex number, 0x7fff79205a6c, which is still the address x points to
std::cout << *x; // will print 40, since b is 40  

评论问题后更新。

如果通过为其指定另一个指针来创建指针,则该指针将指向与指定它的指针相同的地址。例如:

int b(22);
int *x(&b);  // Say this again points to 0x7fff79205a6c
int *y = b;

然后

std::cout << x;  // 0x7fff79205a6c
std::cout << y;  // 0x7fff79205a6c

std::cout << *x; // prints 22
std::cout << *y; // prints 22

然后修改b不会更改xy指向的地址,但取消引用xy将返回{的新值{1}}。

此外,修改bx指向的值会产生以下影响:

y