《C和C++代码精粹》——2.5 普通指针

    xiaoxiao2024-04-21  8

    本节书摘来自异步社区出版社《C和C++代码精粹》一书中的第2章,第2.5节,作者: 【美】Chuck Allison,更多章节内容可以访问云栖社区“异步社区”公众号查看。

    2.5 普通指针

    C和C++代码精粹通常编写能接收指向任意类型参数的函数是很方便的。这是很有必要的,例如,用标准的库函数memcpy,能够从一个地址向另一个地址拷贝一块内存。你也可能想调用memcpy来拷贝自己创建的结构:

    struct mystruct a,b; /*...*/ memcpy(&a,&b,sizeof(struct mystruct));

    为了操作任意类型的指针,memcpy把它头两个参数声明为void型指针。可以不需要强制类型转换将任何类型的指针赋予void类型。也可以在C而不是在C++中将void赋予其他任何类型的指针。这里说明了void指针的memcpy函数的简洁实现:

    void* memcpy(void* target, const void* source, size_t n) { char* targetp = (char*) target; const char* sourcep = (const char*) source; while (n--) *targetp++ = *sourcep++; return target; }

    这个版本的memcpy必须把指向void的指针赋予指向char的指针,这样它就可以每次传递内存块的一个字节,并对这个字节中的数据进行拷贝。试图复引用一个void*是没有意义的,因为它的大小是未知的。

    本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

    相关资源:敏捷开发V1.0.pptx
    最新回复(0)