我对理解指针有点新意,所以我希望有人可以检查这一点,以帮助我确保我对指针的工作方式有了正确的认识。我正在尝试简化指针是什么以及如何使用它们的想法
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,对吗?
我知道这可能听起来很愚蠢,但我只是想从概念上把握这个。我花了更多的时间,而不是承认在我刚刚提交的项目中试图理解这个概念(我做了,但是花了太长时间)
答案 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;
会增加