将指针从function传递到function
我对理解指针有点新意,所以我希望有人可以检查一下,以帮助我确保我对指针的工作原理有了正确的认识。 我正在尝试简化指针是什么以及如何使用它们的想法
functA(int *numb){ functB(numb); } functB(int *numb){ functC(numb); } functC(int *numb){ *numb+=1; } int main (){ int testNumber = 0; functA(&testNumber); . . . }
所以在main中,我发送testNumber的地址到functionA.所以当我将这个地址发送到functA时,没有问题,对吗?
functionA有一个可以保存地址的指针参数,当我发送地址时它不会遇到问题,对吧? 然后,由于麻木(在functA中)是指针,我可以将它发送到functB,因为functB可以接受一个地址。 另外,我仍然发送testNumber所在的地址,对吗?
再次,我发送麻木(从functB)到functC和functC,我正在derefencing这个位置(有更好的方式说这个?)并将计数增加1.所以当这样做时,testNumber应该是1,正确?
我知道这可能听起来很愚蠢,但我只是想从概念上把握这个。 我花了更多的时间,而不是我愿意承认试图在我刚刚提交的项目中实现这个概念(我做了,但是花了太长时间)
变量存储在存储器中的某个位置,并且存储有一个值。 每个地点都有地址。
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
。 所以当你做*functC::numb += 1;
时, testNumber
会增加*functC::numb += 1;
这篇文章中的问题太多了。 只要你提到正确的地址,你就会很开心。 但是这里有太多的指针可能会导致一些错误,请小心。
所以当我将此地址发送到functA时,没有问题,对吗?
是
functionA有一个可以保存地址的指针参数,当我发送地址时它不会遇到问题,对吧?
是
另外,我仍然发送testNumber所在的地址,对吗?
是
…..有没有更好的方式来说这个?)
不,是的,这取决于要求。
所以当这个完成时,testNumber应该是1,对吗?
是