zoukankan      html  css  js  c++  java
  • memset学习

    转自:http://c.biancheng.net/view/231.html

    1.定义

    memset() 函数可以说是初始化内存的“万能函数”,通常为新申请的内存进行初始化工作。它是直接操作内存空间,mem即“内存”(memory)的意思。

    该函数的原型为:

    # include <string.h>
    void *memset(void *s, int c, unsigned long n);

    将指针变量 s 所指向的前 n 字节的内存单元用一个“整数” c 替换,注意 c 是 int 型。s 是 void* 型的指针变量,所以它可以为任何类型的数据进行初始化

    memset 一般使用“0”初始化内存单元,而且通常是给数组或结构体进行初始化。

    赋值为 '' 和 0 是等价的,因为字符 '' 在内存中就是 0。所以在 memset 中初始化为 0 也具有结束标志符 '' 的作用,所以通常我们就写“0”。

    2.例子

    # include <stdio.h>
    # include <string.h>
    int main(void)
    {
        int i;  //循环变量
        char str[10];
        char *p = str;
        memset(str, 0, sizeof(str));  //只能写sizeof(str), 不能写sizeof(p)
        for (i=0; i<10; ++i)
        {
            printf("%dx20", str[i]);
        }
        printf("
    ");
        return 0;
    }
    根据memset函数的不同,输出结果也不同,分为以下几种情况:
    memset(p, 0, sizeof(p));  //地址的大小都是4字节
    0 0 0 0 -52 -52 -52 -52 -52 -52
    
    memset(p, 0, sizeof(*p));  //*p表示的是一个字符变量, 只有一字节
    0 -52 -52 -52 -52 -52 -52 -52 -52 -52
    
    memset(p, 0, sizeof(str));
    0 0 0 0 0 0 0 0 0 0
    
    memset(str, 0, sizeof(str));
    0 0 0 0 0 0 0 0 0 0
    
    memset(p, 0, 10);  //直接写10也行, 但不专业
    0 0 0 0 0 0 0 0 0 0
  • 相关阅读:
    如何在linux下使用sudo命令不用输入密码
    QT读写ini配置文件
    dubbo的灰度发布
    dubbo的重试原则
    dubbo的启动时检查
    dubbo的超时处理和配置覆盖
    dubbo配置文件加载顺序
    java基础-泛型的优点
    idea提交多个项目到github的同一个repository
    【掌握】dubbo环境搭建linux
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/13877192.html
Copyright © 2011-2022 走看看