将指针从功能传递到功能

时间:2017-01-30 07:18:42

标签: c pointers

我对理解指针有点新意,所以我希望有人可以检查这一点,以帮助我确保我对指针的工作方式有了正确的认识。我正在尝试简化指针是什么以及如何使用它们的想法

functA(int *numb){

functB(numb);

}

functB(int *numb){

functC(numb);

}

functC(int *numb){

*numb+=1;

}

int main (){

int testNumber = 0;

functA(&testNumber);
.
.
.
}

所以在main中,我将testNumber的地址发送到函数A.所以当我将此地址发送到functA时,没有问题,对吗?

由于功能A有一个可以保存地址的指针参数,所以当我发送地址时它不会遇到问题,对吧?然后,因为麻木(在functA中)是指针,我可以将它发送到functB,因为functB可以接受一个地址。另外,我仍然发送testNumber所在的相同地址,对吗?

再次,我发送麻木(从functB)到functC和functC,我正在解释这个位置(有更好的方式说这个吗?)并将计数增加1.所以当这样做时,testNumber应该是1,对吗?

我知道这可能听起来很愚蠢,但我只是想从概念上把握这个。我花了更多的时间,而不是承认在我刚刚提交的项目中试图理解这个概念(我做了,但是花了太长时间)

2 个答案:

答案 0 :(得分:2)

这篇文章中有太多问题。只要您提及正确的地址,您就会感到高兴。但是这里有太多的指针可能会导致一些错误,请小心。

  

所以当我将此地址发送到functA时,没有问题,对吗?

  

由于功能A有一个指针参数,它可以保存一个地址   我发送地址时遇到了问题,对吧?

  

另外,我还在发送testNumber所在的地址,   正确的吗?

  

.....有更好的方式来说这个吗?)

否和是,这取决于要求。

  

所以当这样做时,testNumber应该是1,正确吗?

答案 1 :(得分:0)

变量存储在内存中的某个位置,并在其中存储一个值。每个地点都有地址。

variable

location_value

location_address

指针(例如,int *p)只是一个变量,就像其他变量一样(比如,int a;)。差异是指针存储某个位置的地址(您已经知道)。

variable: int testNumber = 10;

location_value: 10

location_address: 0xABCD000 // <-- 'testNumber' is stored at this location

----------------------------

variable: int *numb = &testNumber;

location_value: 0xABCD000 // <-- note: value of 'numb' is an address, address of 'testNumber'

location_address: 0x1234000 // <-- numb itself is stored at 0x12340000

因为numb是一个变量,你可以继续将其值赋给同一类型的其他变量。

在您的情况下functC::numb = functB::numb = functA::numb = &testNumber = 0xABCD000。这是正确的。

因此,当您取消引用*functC::numb时,您正在访问存储在地址functC::numb的变量,该变量恰好是testNumber。因此,当您testNumber

时,*functC::numb += 1;会增加