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的帖子,我们无法判断。