当前位置: 首页 > wzjs >正文

设计参考图网站信息流广告的特点

设计参考图网站,信息流广告的特点,网站开发前段和后端,wordpress 反广告插件这里写目录标题 1. memset用法及示例2.常见用途2.1 初始化数组2.2 清零动态分配的内存2.3 初始化结构体2.4 填充非零值 3.注意事项4. 总结 1. memset用法及示例 memset 是 C 标准库中的一个函数,用于将一段内存区域填充为指定的值。它通常用于初始化数组、结构体或…

这里写目录标题

  • 1. memset用法及示例
  • 2.常见用途
    • 2.1 初始化数组
    • 2.2 清零动态分配的内存
    • 2.3 初始化结构体
    • 2.4 填充非零值
  • 3.注意事项
  • 4. 总结

1. memset用法及示例

memset 是 C 标准库中的一个函数,用于将一段内存区域填充为指定的值。它通常用于初始化数组、结构体或动态分配的内存。

#include <string.h>  // 需要包含头文件
void *memset(void *ptr, int value, size_t num);

参数:

  • ptr:指向要填充的内存区域的指针。
  • value:要填充的值(以 int 形式传递,但实际填充时会转换为 unsigned char)。
  • num:要填充的字节数。

返回值:返回指向 ptr 的指针。

2.常见用途

  • 初始化数组:将数组的所有元素设置为特定值。
  • 清零内存:将内存区域设置为 0。
  • 初始化结构体:将结构体的内存区域设置为特定值。

示例代码

2.1 初始化数组

将数组的所有元素设置为 0:

#include <stdio.h>
#include <string.h>int main() {int arr[10];memset(arr, 0, sizeof(arr));  // 将数组所有元素设置为 0for (int i = 0; i < 10; i++) {printf("arr[%d] = %d\n", i, arr[i]);}return 0;
}

输出:

arr[0] = 0
arr[1] = 0
...
arr[9] = 0

2.2 清零动态分配的内存

将动态分配的内存设置为 0:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main() {int *ptr = (int *)malloc(10 * sizeof(int));if (ptr == NULL) {printf("Memory allocation failed\n");return 1;}memset(ptr, 0, 10 * sizeof(int));  // 将动态分配的内存清零for (int i = 0; i < 10; i++) {printf("ptr[%d] = %d\n", i, ptr[i]);}free(ptr);  // 释放内存return 0;
}

输出:

ptr[0] = 0
ptr[1] = 0
...
ptr[9] = 0

2.3 初始化结构体

将结构体的内存区域设置为特定值:

#include <stdio.h>
#include <string.h>struct Point {int x;int y;
};int main() {struct Point p;memset(&p, 0, sizeof(p));  // 将结构体清零printf("p.x = %d, p.y = %d\n", p.x, p.y);return 0;
}

输出:

p.x = 0, p.y = 0

2.4 填充非零值

将数组的所有字节设置为 1:

int main() {int arr[10];memset(arr, 1, sizeof(arr));  // 将数组的每个字节设置为 1printf("%d\n",sizeof(arr));for (int i = 0; i < 10; i++) {printf("arr[%d] = %08x\n", i, arr[i]);  // 打印十六进制值}return 0;
}

输出:

40
arr[0] = 01010101
arr[1] = 01010101
...
arr[9] = 01010101

注意:memset 是按字节填充的,因此 int 类型的每个字节都会被设置为 1,而不是整个 int 值变为 1。

如果是想将数组中的每个 元素 设置为 1,而不是将每个 字节 设置为 1,不能直接使用 memset,因为 memset 是按字节操作的。 对于 int 类型的数组,每个元素占 4 个字节(假设 int 是 32 位),memset 会将每个字节设置为 1,导致每个 int 元素的值实际上是 0x01010101(即十进制的 16843009)。

正确方法
要将数组中的每个元素设置为 1,可以使用循环逐个赋值:

  1. 使用循环初始化
#include <stdio.h>int main() {int arr[10];// 将数组的每个元素设置为 1for (int i = 0; i < 10; i++) {arr[i] = 1;}// 打印数组内容for (int i = 0; i < 10; i++) {printf("arr[%d] = %08x\n", i, arr[i]);}return 0;
}

输出:

arr[0] = 00000001
arr[1] = 00000001
...
arr[9] = 00000001
  1. 使用 for 循环的简洁写法 C99 及以上版本支持在循环中直接定义变量:
for (int i = 0; i < 10; i++) {arr[i] = 1;
}
  1. 使用 memset 的替代方案
    如果使用类似 memset 的方式,可以编写一个宏或函数来实现:
#include <stdio.h>
#include <string.h>#define SET_ARRAY(arr, value, size) \for (size_t i = 0; i < size; i++) { \arr[i] = value; \}int main() {int arr[10];SET_ARRAY(arr, 1, 10);  // 将数组的每个元素设置为 1// 打印数组内容for (int i = 0; i < 10; i++) {printf("arr[%d] = %08x\n", i, arr[i]);}return 0;
}

为什么不能用 memset?
memset 是按字节填充的,而 int 类型的每个元素占 4 个字节(32 位)。当你调用:
memset(arr, 1, sizeof(arr));
实际上是将每个字节设置为 1,因此每个 int 元素的值是:0x01010101 即十进制的 16843009,而不是 1。

总结
方法 适用场景 代码示例
循环赋值 初始化数组元素为特定值 for (int i = 0; i < size; i++) arr[i] = 1;
宏定义 简化代码,支持任意类型 #define SET_ARRAY(arr, value, size) …
memset 按字节填充(不适合初始化 int) memset(arr, 0, sizeof(arr))
如果你需要将数组的每个元素设置为 1,推荐使用循环赋值的方式。

3.注意事项

按字节填充:

memset 是按字节填充的,因此对于非字符类型的数组(如 int 数组),填充的值可能不符合预期。

例如,memset(arr, 1, sizeof(arr)) 会将每个字节设置为 1,而不是将每个 int 元素设置为 1。

清零内存:

使用 memset(ptr, 0, num) 可以安全地将内存区域清零。

性能:

memset 通常由编译器优化为高效的机器指令,适合大规模内存操作。

4. 总结

场景 示例代码
初始化数组 memset(arr, 0, sizeof(arr))
清零动态内存 memset(ptr, 0, size * sizeof(int))
初始化结构体 memset(&struct, 0, sizeof(struct))
填充非零值 memset(arr, 1, sizeof(arr))
通过 memset,可以快速初始化或填充内存区域,但需注意其按字节填充的特性

http://www.dtcms.com/wzjs/294170.html

相关文章:

  • 做网络主播网站违法吗营销软文推广平台
  • 5050众筹网站开发爱站网seo工具包
  • 黑客如何攻击网站seo标题生成器
  • oa网站建设seo自然排名
  • good设计网seo网站优化论文
  • 广州网站的建设公司制作网站教学
  • 厦门公司网站建设百度竞价排名危机事件
  • 怎样制作网页视频seo网站内容优化
  • 生活服务网站开发与设计网站如何优化一个关键词
  • 工作是否能给我们带来快乐搜索引擎优化工作
  • 网站开发工期安排表百度下载安装官方下载
  • 怎么做动态网站视频教程磁力云搜索引擎入口
  • 给宝宝做衣服网站好百度地图导航2022最新版下载
  • lnmp怎么做网站怎么推广销售
  • 制作网页教程的方法seo推广有哪些公司
  • 北京引流推广公司游戏优化大师有用吗
  • 广州市数商云网络科技有限公司优化大师官方网站
  • 品牌网站建设4a小蝌蚪人工智能教育培训机构排名
  • 做网批有专门的网站吗?优化设计四年级上册语文答案
  • 做地铁系统集成的公司网站宁波百度关键词推广
  • 阿里巴巴网站建设初衷线下营销推广方式有哪些
  • 四川网站建设套餐手机优化大师怎么退款
  • 聊城市公司网站建站短视频培训机构排名
  • 福建建设人才与科技发展中心济南新站seo外包
  • 宜兴宜兴建设局网站友情链接有哪些展现形式
  • 邯郸哪里有做网站的李网站seo诊断分析和优化方案
  • 鞍山外国网站制作网站人多怎么优化
  • 门户网站代做合肥网络推广
  • 网站搬家后出错产品推广方法有哪些
  • 合肥网站优化服务网营销推广的主要方法