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

简介:

本节书摘来自异步社区出版社《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*是没有意义的,因为它的大小是未知的。

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

相关文章
|
3天前
|
存储 安全 编译器
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
|
18天前
|
C++ 容器
【编程技巧】 C++11智能指针
C++11引入了智能指针以自动管理内存,防止内存泄漏和悬挂指针: - `shared_ptr`:引用计数,多所有权,适用于多个对象共享资源。 - `unique_ptr`:独占所有权,更轻量级,适用于单一对象所有者。 - `weak_ptr`:弱引用,不增加引用计数,解决`shared_ptr`循环引用问题。 ## shared_ptr - 支持引用计数,所有者共同负责资源释放。 - 创建方式:空指针、new操作、拷贝构造/移动构造,以及自定义删除器。 - 提供`operator*`和`operator->`,以及`reset`、`swap`等方法。 ## unique_ptr
228 1
|
18天前
|
C++
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
17 0
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
|
2天前
|
安全 编译器 程序员
【C++11】智能指针
【C++11】智能指针
3 0
|
9天前
|
编译器 程序员 C++
【C++高阶】掌握C++多态:探索代码的动态之美
【C++高阶】掌握C++多态:探索代码的动态之美
13 0
|
12天前
|
存储 安全 程序员
|
18天前
|
C++
C++指针
C++指针
10 0
|
18天前
|
C语言
指针进阶(C语言终)
指针进阶(C语言终)
|
3天前
|
编译器 C语言
【C语言初阶】指针篇—下
【C语言初阶】指针篇—下