/*-----------------------------------------
mems.c -- 使用 memcpy() 和 memmove()
-----------------------------------------*/ #include <stdio.h>
#include <string.h>
#include <stdlib.h> #define SIZE 10 void show_array(const int ar[], int n); int main()
{
int values[SIZE] = {, , , , , , , , , };
int target[SIZE];
double curious[SIZE / ] = {2.0, 2.0e5, 2.0e10, 2.0e20, 2.0e30}; puts("memcpy() used:");
fputs("values (original data):\n", stdout); //等同于 puts("values (original data):");
show_array(values, SIZE);
memcpy(target, values, SIZE * sizeof(int));
puts("target (copy of values):");
show_array(target, SIZE); puts("\nUsing memmove() with overlapping ranges:");
memmove(values + , values, (SIZE / ) * sizeof(int));
puts("values -- elements 0-4 copied to 2-6:");
show_array(values, SIZE); puts("\nUsing memcpy() to copy double to int:");
memcpy(target, curious, (SIZE / ) * sizeof(double));
puts("target -- 5 double into 10 int positions:");
show_array(target, SIZE / );
show_array(target + , SIZE / ); return ;
} void show_array(const int ar[], int n)
{
for (int index = ; index != n; ++index)
printf("%d ", ar[index]); fputc('\n', stdout);
}

mems.c

程序最后一次调用 memcpy() 从 double 类型数组中把数据拷贝到 int 类型数组中,演示了 memcpy() 函数不关心数据的类型,它只负责从一个位置把一些字节拷贝到另一个位置。而且,拷贝过程中也不会进行类型转换。如果用循环对数组中的每个元素赋值,double 类型的值会在赋值过程被转换为 int 类型的值。这种情况下,按原样拷贝字节,然后程序将这些位组合解释成 int 类型。

第 16 章 C 预处理器和 C 库(string.h 库中的 memcpy() 和 memmove())的更多相关文章

  1. 第 16 章 C 预处理器和 C 库(可变参数:stdarg.h)

    /*------------------------------------------------- varargs.c -- use variable number of arguments -- ...

  2. 第 16 章 C 预处理器和 C 库(qsort() 函数)

    /*---------------------------------------- qsorter.c -- 用 qsort() 排序一组数字 --------------------------- ...

  3. 第 16 章 C 预处理器和 C 库(直角坐标转换极坐标)

    /*------------------------------------- rect_pol.c -- 把直角坐标转换为极坐标 ---------------------------------- ...

  4. 第 16 章 C 预处理器和 C 库(预定义宏)

    /*------------------------------------- predef.c -- 预定义宏和预定义标识符 ------------------------------------ ...

  5. 第 16 章 C 预处理器和 C 库(条件编译)

    /*-------------------------------------- names_st.h -- names_st 结构的头文件 ----------------------------- ...

  6. ASM:《X86汇编语言-从实模式到保护模式》第16章:Intel处理器的分页机制和动态页面分配

    第16章讲的是分页机制和动态页面分配的问题,说实话这个一开始接触是会把人绕晕的,但是这个的确太重要了,有了分页机制内存管理就变得很简单,而且能直接实现平坦模式. ★PART1:Intel X86基础分 ...

  7. C和指针 (pointers on C)——第十四章:预处理器

    第十四章 预处理器 我跳过了先进的指针主题的章节. 太多的技巧,太学科不适合今天的我.但我真的读,读懂.假设谁读了私下能够交流一下.有的小技巧还是非常有意思. 预处理器这一章的内容.大家肯定都用过.什 ...

  8. CSS面试复习(三):预处理器、工程化方案、三大框架中的CSS

    一.预处理器 1.介绍 基于CSS的另一种语言.通过工具编译成CSS.添加了很多CSS不具备的特性.能提升CSS文件的组织 2.less嵌套 3 .sass嵌套 4. less变量 5.sass变量 ...

  9. 《你必须知道的495个C语言问题》读书笔记之第8-10章:字符串、布尔类型和预处理器

    一.字符和字符串 1. Q:为什么strcat(string, '!')不行? A:strcat()用于拼接字符串,所以应该写成strcat(string, "!")." ...

随机推荐

  1. MongoDB调优-查询优化-MongoDB Profiler

    MongoDB查询优化-MongoDB Profiler MongoDB Profiler 概述 官方文档:https://docs.mongodb.com/manual/tutorial/manag ...

  2. Java并发编程笔记之Timer源码分析

    timer在JDK里面,是很早的一个API了.具有延时的,并具有周期性的任务,在newScheduledThreadPool出来之前我们一般会用Timer和TimerTask来做,但是Timer存在一 ...

  3. Windows系统环境下创建mysql主从数据库方法(双向主从复制)

    创建mysql主从数据库方法(双向主从复制) (一)Windows系统下的MySQL主从复制(单向复制) (1)环境说明: 1,Mysql版本:mysql5.7.20(主从机mysql版本必须一致) ...

  4. shiro源码篇 - shiro的session共享,你值得拥有

    前言 开心一刻 老师对小明说:"乳就是小的意思,比如乳猪就是小猪,乳名就是小名,请你用乳字造个句" 小明:"我家很穷,只能住在40平米的乳房" 老师:" ...

  5. oracle中if/else的三种实现方式

    1.标准sql规范 .单个IF IF v=... THEN END IF; .IF ... ELSE IF v=... THEN ELSE t....; END IF; .多个IF IF v=... ...

  6. 从零搭建生产环境的ghost2.0博客

    当前安装过程是在ghost cli 1.9.2上的,由于ghost更新特别快,我安装我个人博客cmlanche.com的时候还是1.9.1,当时没碰到啥问题,到1.9.2就有一点点不一样了,所以要注意 ...

  7. C++基础知识小记

    最近在帮华为接口人研究自动化部署项目AutoDeploy,把代码发给我了,不过都是用C++写的,自己虽然在大学也学了一学期的C++不过也是很菜鸟,只是学了基本语法,还远未达到实战项目,不管怎么说就是撸 ...

  8. 《精通CSS层叠样式表》

    书名 <精通CSS层叠样式表> 图片 时间 2017-7月 学习 感觉和ps一样对我都不友好 3天撸完

  9. Hadoop小知识点总结1

    1.数据仓库warehouse一般不做更改,只做查询 2.OLTP:联机事务处理,比如:转账 OLAP:联机分析处理,比如:只做查询 3.hadoop的思想来源: GFS (Google的文件系统)即 ...

  10. Oracle索引失效原因及解决方法

    一.Oracle索引失效的原因 1使用否定关键字 !=, <> ,not in,not exist select * fromdrama where id <> 1,Mysql ...