关于指针和去引用 我最近一直在学习C++,并通过游戏编程来获取《C++》。我在关于指针的章节中,有人向我介绍了一个我有疑问的例子。代码如下: #include "stdafx.h" #include <iostream> using namespace std; void badSwap(int x, int y); void goodSwap(int* const pX, int* const pY); int main() { int myScore = 150; int yourScore = 1000; cout << "Original values\n"; cout << "myScore: " << myScore << "\n"; cout << "yourScore: " << yourScore << "\n\n"; cout << "Calling badSwap()\n"; badSwap(myScore, yourScore); cout << "myScore: " << myScore << "\n"; cout << "yourScore: " << yourScore << "\n\n"; cout << "Calling goodSwap()\n"; goodSwap(&myScore, &yourScore); cout << "myScore: " << myScore << "\n"; cout << "yourScore: " << yourScore << "\n"; cin >> myScore; return 0; } void badSwap(int x, int y) { int temp = x; x = y; y = temp; } void goodSwap(int* const pX, int* const pY) { //store value pointed to by pX in temp int temp = *pX; //store value pointed to by pY in address pointed to by pX *pX = *pY; //store value originally pointed to by pX in address pointed to by pY *pY = temp; }

关于指针和去引用 我最近一直在学习C++,并通过游戏编程来获取《C++》。我在关于指针的章节中,有人向我介绍了一个我有疑问的例子。代码如下: #include "stdafx.h" #include <iostream> using namespace std; void badSwap(int x, int y); void goodSwap(int* const pX, int* const pY); int main() { int myScore = 150; int yourScore = 1000; cout << "Original values\n"; cout << "myScore: " << myScore << "\n"; cout << "yourScore: " << yourScore << "\n\n"; cout << "Calling badSwap()\n"; badSwap(myScore, yourScore); cout << "myScore: " << myScore << "\n"; cout << "yourScore: " << yourScore << "\n\n"; cout << "Calling goodSwap()\n"; goodSwap(&myScore, &yourScore); cout << "myScore: " << myScore << "\n"; cout << "yourScore: " << yourScore << "\n"; cin >> myScore; return 0; } void badSwap(int x, int y) { int temp = x; x = y; y = temp; } void goodSwap(int* const pX, int* const pY) { //store value pointed to by pX in temp int temp = *pX; //store value pointed to by pY in address pointed to by pX *pX = *pY; //store value originally pointed to by pX in address pointed to by pY *pY = temp; },c++,C++,你为什么要取消作业双方的引用?这不等于说“1000=150”吗?*px=*py意味着我们分配的不是地址,而是从py的地址到px的地址。*px=*py意味着我们分配的不是地址,而是从py的地址到px的地址 你为什么要取消作业双方的引用?这不等于说“1000=150”吗 不,就像下面这样: int x = 1000; int y = 150; x = y; 不等于说“1000=150”。您将指定给对象,而不是它当前包含的值 下面是完全相同的(因为表达式*px是一个左值,表示对象x,表达式*py是

你为什么要取消作业双方的引用?这不等于说“1000=150”吗?

*px=*py意味着我们分配的不是地址,而是从py的地址到px的地址。

*px=*py意味着我们分配的不是地址,而是从py的地址到px的地址

你为什么要取消作业双方的引用?这不等于说“1000=150”吗

不,就像下面这样:

int x = 1000;
int y = 150;

x = y;
不等于说“1000=150”。您将指定给对象,而不是它当前包含的值

下面是完全相同的(因为表达式
*px
是一个左值,表示对象
x
,表达式
*py
是一个左值,表示对象
y
;它们是字面上的别名,而不是对象数值的某个奇怪的、断开连接的版本):

你为什么要取消作业双方的引用?这不等于说“1000=150”吗

不,就像下面这样:

int x = 1000;
int y = 150;

x = y;
不等于说“1000=150”。您将指定给对象,而不是它当前包含的值

下面是完全相同的(因为表达式
*px
是一个左值,表示对象
x
,表达式
*py
是一个左值,表示对象
y
;它们是字面上的别名,而不是对象数值的某个奇怪的、断开连接的版本):


跳过本书的章节或购买其他章节: 现在C++中不需要使用普通指针。
还有一个函数,它完成C++isch的功能。

跳过本书的章节或购买另一章: 现在C++中不需要使用普通指针。
还有一个函数,它执行C++isch的操作。

表达式
*pX=*pY
可以理解为“pX指向的位置将被分配给
pY
指向的位置的值”。它与
badSwap
函数中的
x=y
基本相同,你不会说它等于“1000=150”吧?表达式
*pX=*pY
可以理解为“pX指向的位置将被分配给
pY
指向的位置的值”。基本上和在<代码> BADSWATE/<代码>函数中,你有<代码> x= y>代码>,你不会说它等于“1000=150”,但是你不会取消PX集px等于一个值而不是变量吗?@ C++中的FielARW5255变量可以保存地址(内存位置),然后它被称为指针变量。如果一个变量只保存一个值而不是直接存储它的内存位置,它是一个非指针变量。但是,不允许PX设置px等于一个值而不是变量吗?@ C++中的FielARW5255变量可以保存地址(内存位置),然后它被称为指针变量。如果一个变量只保存一个值,而不是直接存储在它的内存位置上,那么它是一个非指针变量。那么内存位置上实际存储的是什么呢?据我所知,这只是一个值。最初保存该值的变量是否也存储在那里?@FireArrow5235:该变量就是该值。在记忆中,你认为两者之间有什么区别?对象是一个存储区域:在本例中,四个或八个字节包含一个[可能]2的补码数值,该数值等于
1000
。编译时,C++程序知道这些字节在哪里(因为它把它们放在那里)以及如何存储和读取它们。一个“变量”是C++中的一个抽象概念,允许你把这个字节块当作一个独立于它的位置在运行时内存在内存中的实体。我现在明白了。不同之处在于,我的印象是,内存位置只能存储与整数(或其他指定数据类型)相关的数据,而绝对不能存储其他数据。因此,变量和变量所包含的值位于两个不同的位置。我没有看到x是存储在内存位置中的整数。@FireArrow5235:嗯,是的,内存只包含数字。这是一个字节序列。1和0。这些1和0对程序中的整数和浮点值进行编码*。类型、变量和对象的概念是一种抽象,在编译的程序中甚至不存在。它只在高级语言的语法中提供,如C++,只为程序员方便!事实上,这就是这些语言(及其编译器)的全部目的:这样您就不必独自处理不同内存位置的原始数据了!您的编译器非常聪明,它创建了一个可执行文件,根据您的高级程序所描述的语义,该文件做了大量工作来管理这些位和字节,并将所有内容保持在正确的位置。但它实际上并没有在任何地方“存储”类型和变量;这一逻辑已内置于程序中。这是与生俱来的。*(而且,通过组合,从它们构建的更复杂的类型)那么,在内存位置实际存储的是什么呢?据我所知,这只是一个值。最初保存该值的变量是否也存储在那里?@FireArrow5235:该变量就是该值。在记忆中,你认为两者之间有什么区别?对象是一个存储区域:在本例中,四个或八个字节包含一个[可能]2的补码数值,该数值等于
1000
。编译时,C++程序知道这些字节在哪里(因为它把它们放在那里)以及如何存储和读取它们。“变量”是一个抽象词
int   x = 1000;
int   y = 150;
int* px = &x;
int* py = &y;

*px = *py;