这个字符副本的工作原理如下:*(*((char **)p))++ = ch;在c

时间:2014-08-31 11:53:05

标签: c pointers char copy embedded

我在嵌入式C中使用此代码时遇到问题。如果我将p作为某个函数的参数传递但在“p”是本地的情况下不起作用,则效果很好。请帮助详细了解此代码的工作原理。

2 个答案:

答案 0 :(得分:2)

指针p被转换为char **并被解除引用两次,ch被复制到该位置,然后*p递增(指向下一个字符。

我想(因为没有代码就是我所能做到的),“p是本地的”不起作用“与本地的p关系不大,与价值有关p和所讨论代码的上下文语义。代码是否有效取决于p持有有效值,以便双重去引用解析到预期位置。

说实话,你应该避免编写这样的代码,它太“聪明”了,而且Brian Kernighan说:

  

每个人都知道调试的难度是首先编写程序的两倍。所以,如果你在写作时就像你一样聪明,你将如何调试呢?

答案 1 :(得分:0)

P是指向char指针的指针。最初它是char**的类型转换并且解除引用两次。在解除引用2次之后,在这个地方ch被复制。之后它被递增1.Here,to了解如何增加这样的指针,尝试理解如下。*p++等于*pp++,不等于*p(*p)++。像这样,你的指针也会递增。您的复制声明中有可能出现分段错误。