C 在函数之间传递指针
我对指针的理解有点陌生,所以我希望有人能检查一下,以确保我对指针的工作原理有正确的认识。我试图简化指针是什么以及如何使用它们的概念C 在函数之间传递指针,c,pointers,C,Pointers,我对指针的理解有点陌生,所以我希望有人能检查一下,以确保我对指针的工作原理有正确的认识。我试图简化指针是什么以及如何使用它们的概念 functA(int *numb){ functB(numb); } functB(int *numb){ functC(numb); } functC(int *numb){ *numb+=1; } int main (){ int testNumber = 0; functA(&testNumber); . . . } 所以在ma
functA(int *numb){
functB(numb);
}
functB(int *numb){
functC(numb);
}
functC(int *numb){
*numb+=1;
}
int main (){
int testNumber = 0;
functA(&testNumber);
.
.
.
}
所以在main中,我将testNumber的地址发送给functA。所以当我将这个地址发送给functA时,没有问题,对吗
因为funct A有一个指针参数,它可以保存一个地址,所以当我发送一个地址时,它不会遇到问题,对吗?然后,由于numb(在functA中)是一个指针,我可以将它发送到functB,因为functB可以接受地址。另外,我仍然发送testNumber所在的地址,对吗
再次,我将numb(从functB)发送到functC,在functC中,我将解除此位置的防护(有更好的方法来表示吗?),并将计数增加1。所以当这完成时,testNumber应该是1,对吗
我知道这听起来很傻,但我只是想从概念上理解这一点。在我刚刚提交的一个项目中,我花了比我愿意承认的更多的时间试图把这个概念写下来(我做了,但花了太长的时间)这篇文章中的问题太多了。只要你推迟了正确的地址,你就会很高兴。但是太多的指针可能会导致一些错误,要小心 所以当我把这个地址发给functA时,没有问题,对吗 对 因为funct A有一个指针参数,可以保存地址,所以它 当我发送地址时不会遇到问题,对吗 对 另外,我仍然发送testNumber所在的地址, 对吗 对 ……有更好的说法吗?) 不,是的,这取决于要求 所以当这完成时,testNumber应该是1,对吗
是的,这篇文章中的问题太多了。只要你推迟了正确的地址,你就会很高兴。但是太多的指针可能会导致一些错误,要小心 所以当我把这个地址发给functA时,没有问题,对吗 对 因为funct A有一个指针参数,可以保存地址,所以它 当我发送地址时不会遇到问题,对吗 对 另外,我仍然发送testNumber所在的地址, 对吗 对 ……有更好的说法吗?) 不,是的,这取决于要求 所以当这完成时,testNumber应该是1,对吗
是变量存储在内存中的某个位置,并在其中存储了一个值。每个地点都有地址
变量
位置\u值
位置\地址
指针(比如,int*p
)与其他变量(比如,inta;
)一样,只是一个变量。差异是指针存储某个位置的地址(您已经知道)
变量:int testNumber=10代码>
位置\u值:10
location\u address:0xABCD000/变量存储在内存中的某个位置,并在其中存储一个值。每个地点都有地址
变量
位置\u值
位置\地址
指针(比如,int*p
)与其他变量(比如,inta;
)一样,只是一个变量。差异是指针存储某个位置的地址(您已经知道)
变量:int testNumber=10代码>
位置\u值:10
location\u address:0xABCD000//似乎您通过指针更改testNumber
的代码正在工作,如果添加,则testNumber
函数(&testNumber)
调用后testNumber
的值应为1最后的代码>对于新的C程序员来说,行指针总是很棘手的。只要记住,旁边有*就是值,没有*就是地址。当您传递指向另一个函数的指针,并且希望传递地址时,请传递不带星号的变量名。接收函数的变量必须有星号。传递值时则相反(除非您希望接收函数也是指针)。这些规则也有例外,但我非常怀疑您是否需要担心它们,除非您正在重写memcpy或其他内容;)@沃拉,谢谢你。我现在就纠正它挑剔:dereffencing
->dereferencing
通过指针更改testNumber
的代码似乎正在工作,如果添加,则testNumber
函数(&testNumber)后的值应为1最后的代码>对于新的C程序员来说,行指针总是很棘手的。只要记住,旁边有*就是值,没有*就是地址。当您传递指向另一个函数的指针,并且希望传递地址时,请传递不带星号的变量名。接收函数的变量必须有星号。传递值时则相反(除非您希望接收函数也是指针)。这些规则也有例外,但我非常怀疑您是否需要担心它们,除非您正在重写memcpy或其他内容;)@沃拉,谢谢你。我会马上解决的挑剔:dereffence
->dereference
你能详细说明这一部分吗不,是的,这取决于需求
?@4386427我会,如果我能,但我不能。剥猫皮的方法不止一种。也许另一种方式更具逻辑性/可读性,但鉴于当前OP的帖子,我无法判断。你能详细说明这一部分吗否,是的,这取决于要求?@4386427如果可以,我会的,但我不能。剥猫皮的方法不止一种。也许另一种方式更具逻辑性/可读性,但在我看来,鉴于当前OP的帖子,我们无法判断。