我正在学习C ++中的指针,我已经阅读了一篇关于它的文章,我想我理解它,尽管我只是想对我编写的伪代码做一些澄清。
int someGameHealthAddress = 1693;
int healthIWantItToBe = 20;
int * newHealthValue;
newHealthValue = someGameHealthAddress;
*newHealthValue = healthIWantItToBe;
以上是对的吗?就像它的工作方式一样?
编辑:谢谢大家的回答,很高兴我现在得到了这个。你一直很大的帮助:) EDIT2:我很自豪我现在已经掌握了这个问题。从容貌来看,很多人都难以理解指针。答案 0 :(得分:2)
如果someGameHealthAddress
应该是一个地址,那么你需要声明它。 E.g:
int someGameHealth = 1693;
int healthIWantItToBe = 20;
int * someGameHealthAddress; //this is the pointer to an int, which is basically its address
someGameHealthAddress = &someGameHealth; // take address of someGameHealth
*someGameHealthAddress = healthIWantItToBe; // modify the value it points to
在你的代码中,这一行是错误的:
newHealthValue = someGameHealthAddress;
因为它与变量类型不匹配,就像int* = int
。
注意,这可以从整数类型转换为指针类型,它几乎总是一个bug,因为你几乎不知道变量的地址在内存中的绝对值。您通常会找到一些东西,然后使用相对偏移量。当您进行内存中的黑客操作时通常就是这种情况,您的示例似乎就是这样。
答案 1 :(得分:1)
几乎。为了获得指向变量的指针,您需要“地址”运算符&
:
// Set newHealthValue to point to someGameHealth
newHealthValue = &someGameHealth;
(我从变量名中删除了“地址”,因为它不是地址。指针现在包含其地址)。
然后您的最后一行代码将更改newHealthValue
指向的对象的值,即它将更改someGameHealth
。
答案 2 :(得分:1)
这句话错了:
newHealthValue = someGameHealthAddress;
因为左侧有类型指针而右侧是整数。您必须确保类型在分配中匹配。要获取someGameHealthAddress
的地址,请使用&
:
newHealthValue = &someGameHealthAddress;
现在类型匹配,因为右侧是整数的地址,因此是指针。
答案 3 :(得分:1)
取决于您是否希望指针的值为1693,或者您希望指针指向变量someGameHealthAddress的地址
1.将newHealthValue值指定给someGameHealthAddress值
*newHealthValue = someGameHealthAddress;
指定newHealthValue指向someGameHealthAddress变量的地址
* newHealthValue =& someGameHealthAddress;
将newHealthValue的地址分配给someGameHealthAddress变量的值
& newHealthValue = someGameHealthAddress;
将newHealthValue的地址分配给someGameHealthAddress变量的地址
& newHealthValue =& someGameHealthAddress;
答案 4 :(得分:0)
*
和&
是c++
& means "the address off"
即,& p表示p。
的地址
* means "value in the location"
* p表示存储在p。
中的地址中的值
因为那个p必须是一个指针。(因为p应该保留一个地址)。
这里newHealthValue = someGameHealthAddress;
将给出编译错误。因为someGameHealthAddress是一个整数而newHealthValue是整数指针。
int*=int
是类型未匹配
您可以使用以下语句存储someGameHealthAddress的地址
newHealthValue = &someGameHealthAddress
;
which means newHealthValue = (address of)someGameHealthAddress
*newHealthValue = healthIWantItToBe;
在语法上是正确的,因为它将healthIWantItToBe
的值存储到newHealthValue
指向的地址