最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言memset函數詳解

 更新時間:2021年09月18日 11:05:42   作者:竹一筆記  
這篇文章主要介紹了C語言中的memset()函數,包括其與memcpy()函數的區(qū)別,需要的朋友可以參考下,希望能夠給你帶來幫助

在c語言中,使用變量前,需要先對變量的值進行初始化。數組在內存中占用一片連續(xù)的存儲塊。而c語言提供了memset函數(頭文件string.h)對數組進行組團賦值。(memset函數也能對變量賦值,但只有無聊的人才會這么做。詳見下文目錄五)

一、memset函數原型:

void memset ( void *s , char ch, unsigned n )

函數功能:將s為首地址的一片連續(xù)的n個字節(jié)內存單元都賦值為ch

二、使用memset函數

# include <stdio.h>
# include <string.h>
int main() {
    char c[10];
    // 把數組c的10個元素都賦值為'a'
    memset(c, 'a', 10);
    for (int i=0; i<10; i++) {
        printf("%c\t", c[i]);
    }
    return 0;
}

輸出:
a a a a a a a a a a

# include <stdio.h>
# include <string.h>
int main()
{
    int a[10];
    memset(a, 0, 10*sizeof(int));
    /* 數組a是int類型的,一個int占4個字節(jié),所以a[10]實際上有40個字節(jié)。
       而char類型只占1個字節(jié),所以不需要乘sizeof(char) */
    // 輸出數組a和b
    for (int i=0; i<10; i++) {
        printf("%d\t", a[i]);
    }
    printf("\n");
    return 0;
}

輸出:
0 0 0 0 0 0 0 0 0 0

emset函數是對n個字節(jié)進行賦值。而char類型占1個字節(jié)。但是int類型占4個字節(jié),所以對int、short等類型賦值時,需要乘上字節(jié)數。

三、給int類型賦值為1

# include <stdio.h>
# include <string.h>
int main()
{
    int a[10];
    memset(a, 1, 10*sizeof(int));
    // 輸出數組a
    for (int i=0; i<10; i++) {
        printf("%d\t", a[i]);
    }
    return 0;
}

輸出:
16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009

輸出結果可以看到,并沒有給數組元素賦值為1。為什么呢?這是為什么呢?

前面我們說過,memset是對連續(xù)的n個字節(jié)進行賦值。但是int類型占4個字節(jié)。memset賦值時,直接將數組拆成40個字節(jié)賦值,并沒有把4個字節(jié)看成一個整體

四、扒開內存

我們定義一個數組;
int a[2];
memset(a, 1, 2*sizeof(int));
假設內存中每個位都是0,定義數組,以a為首地址的內存各個位:
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
使用memset函數,對每個字節(jié)賦值為1。一個字節(jié)為8位,所以,數組變?yōu)?
0000 0001 0000 0001 0000 0001 0000 0001
0000 0001 0000 0001 0000 0001 0000 0001
注意,賦值數組時,一個int被拆成了4個單獨的字節(jié)
而0000 0001 0000 0001 0000 0001 0000 0001的10進制剛好為
16,843,009

五、memset給變量賦值

memset函數第一個參數是指針類型,也就是說,只要我們給他一個地址就行了

# include <stdio.h>
# include <string.h>
int main()
{
    char a;
    memset(&a, 'c', 1);
    printf("%c\n", a);
    return 0;
}

輸出:
c

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!

相關文章

  • C語言回溯法 實現組合數 從N個數中選擇M個數

    C語言回溯法 實現組合數 從N個數中選擇M個數

    在平時的算法的題目中,時常會遇到組合數相關的問題,暴力枚舉。在N個數中挑選M個數出來。利用for循環(huán)也可以處理,但是可拓展性不強,于是寫這個模板供以后參考
    2018-08-08
  • C語言實現乒乓球比賽

    C語言實現乒乓球比賽

    這篇文章主要為大家詳細介紹了C語言實現乒乓球比賽,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • C++小知識:用++i替代i++

    C++小知識:用++i替代i++

    今天小編就為大家分享一篇關于C++小知識:用++i替代i++,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • C/C++實現磁盤相關操作的示例代碼

    C/C++實現磁盤相關操作的示例代碼

    這篇文章主要為大家詳細介紹了C/C++如何實現磁盤相關操作,例如遍歷磁盤容量、實現磁盤格式化、移除指定磁盤等,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-11-11
  • c++中inline的用法分析

    c++中inline的用法分析

    本篇文章是對c++中inline的用法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C/C++的關鍵字之static你了解嗎

    C/C++的關鍵字之static你了解嗎

    這篇文章主要為大家詳細介紹了C/C++的關鍵字之static,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C++面試基礎之static關鍵字詳解

    C++面試基礎之static關鍵字詳解

    這篇文章主要給大家介紹了關于C++面試基礎之static關鍵字的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-02-02
  • C語言之飛機大戰(zhàn)游戲

    C語言之飛機大戰(zhàn)游戲

    這篇文章主要為大家詳細介紹了C語言之飛機大戰(zhàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C語言實現帶頭結點的鏈表的創(chuàng)建、查找、插入、刪除操作

    C語言實現帶頭結點的鏈表的創(chuàng)建、查找、插入、刪除操作

    這篇文章主要介紹了C語言實現帶頭結點的鏈表的創(chuàng)建、查找、插入、刪除操作方法,對于了解數據結構中鏈表的各項操作有很好的借鑒價值,需要的朋友可以參考下
    2014-09-09
  • VC隨機函數srand和rand用法

    VC隨機函數srand和rand用法

    VC中隨機函數最常用就是srand和rand(實際上是屬于標準C函數),其中srand負責設置隨機種子,rand則負責生成隨機數。使用此二隨機函數需要包含<stdlib.h>頭文件
    2016-11-11

最新評論

嵩明县| 新郑市| 监利县| 宿州市| 阳西县| 房产| 沂源县| 博湖县| 微山县| 甘肃省| 萝北县| 远安县| 湖州市| 黄冈市| 瓮安县| 竹北市| 金山区| 蚌埠市| 陵川县| 墨竹工卡县| 麦盖提县| 威信县| 平凉市| 临泽县| 襄城县| 酒泉市| 商河县| 融水| 石楼县| 廊坊市| 开鲁县| 大英县| 衡阳市| 叶城县| 上犹县| 佛坪县| 厦门市| 曲周县| 津市市| 北碚区| 万全县|