zoukankan      html  css  js  c++  java
  • C++ ---定义变量初始化

    定义变量时一定要进行初始化,尤其是数组和结构体这种占用内存大的数据结构。在使用数组的时候经常因为没有初始化而产生“烫烫烫烫烫烫”这样的野值,俗称“乱码”。
    
    每种类型的变量都有各自的初始化方法,memset() 函数可以说是初始化内存的“万能函数”,通常为新申请的内存进行初始化工作。它是直接操作内存空间,mem即“内存”(memory)的意思。该函数的原型为:
    
    # include <string.h>
    void *memset(void *s, int c, unsigned long n);
    函数的功能是:将指针变量 s 所指向的前 n 字节的内存单元用一个“整数” c 替换,注意 c 是 int 型。s 是 void* 型的指针变量,所以它可以为任何类型的数据进行初始化。
    
    memset() 的作用是在一段内存块中填充某个给定的值。因为它只能填充一个值,所以该函数的初始化为原始初始化,无法将变量初始化为程序中需要的数据。用memset初始化完后,后面程序中再向该内存空间中存放需要的数据。
    
    memset 一般使用“0”初始化内存单元,而且通常是给数组或结构体进行初始化。一般的变量如 charintfloatdouble 等类型的变量直接初始化即可,没有必要用 memset。如果用 memset 的话反而显得麻烦。
    
    当然,数组也可以直接进行初始化,但 memset 是对较大的数组或结构体进行清零初始化的最快方法,因为它是直接对内存进行操作的。
    
    memset 函数的第三个参数 n 的值一般用 sizeof()  获取,这样比较专业。注意,如果是对指针变量所指向的内存单元进行清零初始化,那么一定要先对这个指针变量进行初始化,即一定要先让它指向某个有效的地址。而且用memset给指针变量如p所指向的内存单元进行初始化时,n 千万别写成 sizeof(p),这是新手经常会犯的错误。因为 p 是指针变量,不管 p 指向什么类型的变量,sizeof(p) 的值都是 4
    # 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:char型初始化函数
    
    头文件:<string.h> 或 <memory.h>
    
    函数原型:void *memset(void *s , int ch , size_t n )
    
    memset(结构体/数组名 , 用于替换的ASCII码对应字符 , 前n个字符 );
    
    memset(结构体/数组名 , "用于替换的字符“ , 前n个字符 );
    
    函数解释:将s中的前n个字节用ch替换并且返回s
    
    函数作用:在一段内存块中填充某一个给定的值,常用于较大的对结构体和数组的清零操作。
  • 相关阅读:
    Could not resolve com.android.support:appcompat-v7:28.0.0 错误处理
    解决 Could not resolve com.android.tools.build:gradle:3.1.3
    https://maven.google.com 连接不上的解决办法(转)
    jquery操作select(取值,设置选中)
    django 使用 request 获取浏览器发送的参数
    jquery下载,实时更新jquery1.2到最新3.3.1所有版本下载
    myeclipse 8.5反编译插件失效
    再探java基础——对面向对象的理解(2)
    庖丁解牛FPPopover
    去大连
  • 原文地址:https://www.cnblogs.com/carle-09/p/12034135.html
Copyright © 2011-2022 走看看