我正确理解指针吗? C ++

时间:2014-01-29 14:14:09

标签: c++ pointers

我正在学习C ++中的指针,我已经阅读了一篇关于它的文章,我想我理解它,尽管我只是想对我编写的伪代码做一些澄清。

int someGameHealthAddress = 1693;
int healthIWantItToBe = 20;
int * newHealthValue;

newHealthValue = someGameHealthAddress;
*newHealthValue = healthIWantItToBe;

以上是对的吗?就像它的工作方式一样?

编辑:谢谢大家的回答,很高兴我现在得到了这个。你一直很大的帮助:) EDIT2:我很自豪我现在已经掌握了这个问题。从容貌来看,很多人都难以理解指针。

5 个答案:

答案 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,或者您希望指针指向变量some​​GameHealthAddress的地址

1.将newHealthValue值指定给someGameHealthAddress值

*newHealthValue = someGameHealthAddress; 
  1. 指定newHealthValue指向someGameHealthAddress变量的地址

    * newHealthValue =& someGameHealthAddress;

  2. 将newHealthValue的地址分配给someGameHealthAddress变量的值

    & newHealthValue = someGameHealthAddress;

  3. 将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指向的地址