今天面试的时候被问到了。
我们知道memcpy传入的指针类型是void*。
但是由于复制的时候要一个个字节去复制,所以我们需要把void转换成char类型来处理。那么问题来了,我可不可以声明函数的时候就写成char*呢?
迷茫2017-04-17 13:36:02
C/C++ 規定可以將任何類型的指針轉換為void指針,void指針轉換為任何類型的指針,所以我們可以將type 轉換為void ,然後將void轉化為char進行memcpy。若是入參定義為char,對於編譯器不能隱身轉換的型別需要在呼叫的地方進行指標型別強轉為char。
PHP中文网2017-04-17 13:36:02
memcpy要做的是bit-wise的拷貝,所以需要逐位的去拷貝。 char類型只佔一個byte的空間,所以選擇char來實作。參數列表使用void*是為了表示該參數可以是指向任意類型的指標。