2017-01-30 134 views
0

我对理解指针有点新,所以我希望有人可以检查一下,以帮助我确定指针是如何工作的。我试图简化的指针是什么概念,以及如何使用它们从函数传递指针到函数

functA(int *numb){ 

functB(numb); 

} 

functB(int *numb){ 

functC(numb); 

} 

functC(int *numb){ 

*numb+=1; 

} 

int main(){ 

int testNumber = 0; 

functA(&testNumber); 
. 
. 
. 
} 

因此,在主,我要送testNumber的地址本功能A.所以,当我这个地址发送给functA,没有问题,对吗?

由于函数A有一个指针参数,它可以容纳一个地址,当我发送一个地址时它不会遇到问题,对吧?然后,由于麻木(在functA中)是一个指针,我可以将它发送给functB,因为functB可以接受一个地址。另外,我仍然发送与testNumber相同的地址,对吗?我发numb(从functB)到functC,在functC中,我取消了这个位置(有没有更好的方法来说这个?),并将计数增加1.所以当这个完成时,testNumber应该是1,正确吗?

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

+0

似乎你的代码改变'testNumber'指针的手段方式工作,并且'testNumber'的值应该是''functA(&testNumber)''后调用,如果你添加'; '在该行末尾 – VolAnd

+0

指针对新C程序员来说总是很棘手。请记住,在*旁边,它是价值,没有它,就是地址。当你传递一个指向另一个函数的指针,并且你想传递_address_时,传递变量名而不用星号。接收函数的变量必须有一个星号。传递一个值时反之亦然(除非你希望接收函数也是一个指针)。这些规则也有例外,但是我非常怀疑你需要担心它们,除非你重写了memcpy或其他东西;) – Aurelius

+0

@VolAnd啊谢谢你。我现在要修复 – Woff

回答

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;

2

太多的问题在这篇文章中。只要你认为正确地址,你会很高兴。但是这里和那里的指针太多可能会导致一些错误,请小心。

所以当我把这个地址发送到functA时,没有问题,对吗?

由于本功能A有一个指针参数,可容纳地址,它将 不会碰到一个问题,当我发送一个地址,对不对?

另外,我还在发送相同的地址testNumber是, 是否正确?

.....有没有更好的办法说这个?)

否,是的,这取决于需求。

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

+0

请您详细说明这个部分'不,是的,它取决于需求'? – 4386427

+0

@ 4386427如果可以的话,我会的,但我不能。有一种以上的方法来剥皮猫。可能是其他方式更合乎逻辑/可读性,但国际海事组织我们无法分辨出当前OP的职位。 – P0W