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

C語(yǔ)言中長(zhǎng)度為0的數(shù)組詳解

 更新時(shí)間:2021年10月13日 10:38:31   作者:zzy570384336  
這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中長(zhǎng)度為0的數(shù)組,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

概述

長(zhǎng)度為0的數(shù)組在標(biāo)準(zhǔn)c和c++中是不合法的,但是在gcc中是可行的。

長(zhǎng)度為0數(shù)組它的最典型的用法就是位于結(jié)構(gòu)體中的最后一項(xiàng)。

使用方式

如下面的例子,分別使用長(zhǎng)度為0的數(shù)組和指針聲明結(jié)構(gòu)體,實(shí)現(xiàn)可變長(zhǎng)度的數(shù)組功能:

#include <stdio.h>
#include <stdlib.h>
struct test1
{
    int a;
    int b[0];
};
struct test2
{
    int a;
    int *b;
};
struct test3
{
    int a;
    int reserved;//占位符,64位系統(tǒng)中保證結(jié)構(gòu)體字節(jié)對(duì)齊,test2中是由編譯器對(duì)齊的,所以?xún)蓚€(gè)結(jié)構(gòu)體占用空間相同
    int *b;
};
int main()
{
    struct test1 *var1;
    struct test2 *var2;
    int iLength = 10;
    int i;
    printf("the length of struct test1:%d\n",sizeof(struct test1));
    printf("the length of struct test2:%d\n",sizeof(struct test2));
    printf("the length of struct test3:%d\n",sizeof(struct test3));
    var1=(struct test1*)malloc(sizeof(struct test1) + sizeof(int) * iLength);
    var1->a=iLength;
    for(i=0; i < var1->a; i++)
    {
        var1->b[i]=i;
        printf("var1->b[%d]=%d\t", i, var1->b[i]);
    }
    printf("\n"); 
    printf("p var1 = %p\n", var1);
    printf("p var1->a %p\n", &var1->a);
    printf("var1->b %p\n", var1->b);
    printf("p var1->b %p\n", &var1->b);
    printf("p var1->b[0] %p\n", &var1->b[0]);
    printf("p var1->b[1] %p\n", &var1->b[1]);
    printf("\n\n");
    var2=(struct test2*)malloc(sizeof(struct test2));
    var2->a=iLength;
    var2->b=(int *)malloc(sizeof(int) * iLength);
    for(i=0; i < var2->a; i++)
    {
        var2->b[i]=i;
        printf("var2->b[%d]=%d\t", i, var2->b[i]);
    }
    printf("\n"); 
    printf("p var2 = %p\n", var2);
    printf("p var2->a %p\n", &var2->a);
    printf("var2->b %p\n", var2->b);
    printf("p var2->b %p\n", &var2->b);
    printf("p var2->b[0] %p\n", &var2->b[0]);
    printf("p var2->b[1] %p\n", &var2->b[1]);
    free(var1);
    free(var2->b);
    free(var2);
    return 0;
}

64位linux系統(tǒng)中運(yùn)行結(jié)果

the length of struct test1:4
the length of struct test2:16
the length of struct test3:16
var1->b[0]=0    var1->b[1]=1    var1->b[2]=2    var1->b[3]=3    var1->b[4]=4    var1->b[5]=5    var1->b[6]=6    var1->b[7]=7    var1->b[8]=8    var1->b[9]=9
p var1 = 0x55eb1a7d7670
p var1->a 0x55eb1a7d7670
var1->b 0x55eb1a7d7674
p var1->b 0x55eb1a7d7674
p var1->b[0] 0x55eb1a7d7674
p var1->b[1] 0x55eb1a7d7678
var2->b[0]=0    var2->b[1]=1    var2->b[2]=2    var2->b[3]=3    var2->b[4]=4    var2->b[5]=5    var2->b[6]=6    var2->b[7]=7    var2->b[8]=8    var2->b[9]=9
p var2 = 0x55eb1a7d76b0
p var2->a 0x55eb1a7d76b0
var2->b 0x55eb1a7d76d0
p var2->b 0x55eb1a7d76b8
p var2->b[0] 0x55eb1a7d76d0
p var2->b[1] 0x55eb1a7d76d4

使用長(zhǎng)度為0的數(shù)組可以比指針更方便地進(jìn)行內(nèi)存的管理。

結(jié)構(gòu)體test1在分配內(nèi)存時(shí),則是采用一次分配的原則,一次性將所需的內(nèi)存全部分配給它,釋放也是一次釋放。數(shù)組和結(jié)構(gòu)體的內(nèi)存是連續(xù)的。

結(jié)構(gòu)體test2在分配內(nèi)存時(shí),需采用兩步:首先,需為結(jié)構(gòu)體分配一塊內(nèi)存空間;其次再為結(jié)構(gòu)體中的成員變量分配內(nèi)存空間。這樣兩次分配的內(nèi)存是不連續(xù)的,需要分別對(duì)其進(jìn)行管理。當(dāng)使用長(zhǎng)度為0的數(shù)組時(shí),則是采用一次分配的原則,一次性將所需的內(nèi)存全部分配給它。相反,釋放時(shí)也是一樣的。

總結(jié)

長(zhǎng)度為0的數(shù)組并不占有內(nèi)存空間,而指針?lè)绞叫枰加脙?nèi)存空間。

對(duì)于長(zhǎng)度為0的數(shù)組,在申請(qǐng)內(nèi)存空間時(shí),采用一次性分配的原則進(jìn)行;對(duì)于包含指針的結(jié)構(gòu)體,才申請(qǐng)空間時(shí)需分別進(jìn)行,釋放時(shí)也需分別釋放。

對(duì)于長(zhǎng)度為0的數(shù)組元素的訪問(wèn)可正常采用數(shù)組方式進(jìn)行。

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Sublime Text 3 實(shí)現(xiàn)C++代碼的編譯和運(yùn)行示例

    Sublime Text 3 實(shí)現(xiàn)C++代碼的編譯和運(yùn)行示例

    下面小編就為大家?guī)?lái)一篇Sublime Text 3 實(shí)現(xiàn)C++代碼的編譯和運(yùn)行示例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • C++ cin輸入的多種方法詳解

    C++ cin輸入的多種方法詳解

    cin是C++編程語(yǔ)言中的標(biāo)準(zhǔn)輸入流對(duì)象,即stream類(lèi)的對(duì)象。cin主要用于從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù),這里的標(biāo)準(zhǔn)輸入,指的是終端的鍵盤(pán)。接下來(lái)通過(guò)本文給大家分享C++ cin輸入的幾種方式,一起看看吧
    2021-09-09
  • C語(yǔ)言實(shí)現(xiàn)掃雷游戲(可展開(kāi))

    C語(yǔ)言實(shí)現(xiàn)掃雷游戲(可展開(kāi))

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)掃雷游戲,實(shí)現(xiàn)掃雷展開(kāi)和提醒,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • 基于C語(yǔ)言編寫(xiě)一個(gè)簡(jiǎn)單的Web服務(wù)器

    基于C語(yǔ)言編寫(xiě)一個(gè)簡(jiǎn)單的Web服務(wù)器

    C語(yǔ)言可以干大事,這篇文章主要為大家詳細(xì)介紹了如何基于C語(yǔ)言可以完成一個(gè)簡(jiǎn)易的Web服務(wù)器,希望這篇文章會(huì)幫你你對(duì)C語(yǔ)言有更深入的理解
    2024-03-03
  • 深入解讀C++中的指針變量

    深入解讀C++中的指針變量

    這篇文章主要介紹了深入解讀C++中的指針變量,是C語(yǔ)言入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • C++中拷貝構(gòu)造函數(shù)的總結(jié)詳解

    C++中拷貝構(gòu)造函數(shù)的總結(jié)詳解

    深拷貝和淺拷貝可以簡(jiǎn)單理解為:如果一個(gè)類(lèi)擁有資源,當(dāng)這個(gè)類(lèi)的對(duì)象發(fā)生復(fù)制過(guò)程的時(shí)候,資源重新分配,這個(gè)過(guò)程就是深拷貝,反之,沒(méi)有重新分配資源,就是淺拷貝
    2013-09-09
  • C語(yǔ)言中的內(nèi)存管理詳情

    C語(yǔ)言中的內(nèi)存管理詳情

    這篇文章主要介紹了C語(yǔ)言中的內(nèi)存管理詳情,手工申請(qǐng)內(nèi)存使用malloc展開(kāi)全文內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • c語(yǔ)言字符串函數(shù)strstr,strtok,strerror的使用和實(shí)現(xiàn)

    c語(yǔ)言字符串函數(shù)strstr,strtok,strerror的使用和實(shí)現(xiàn)

    C語(yǔ)言中的字符串處理函數(shù)如strtok、strstr和strerror對(duì)于字符串的處理有著重要的作用,strtok函數(shù)用于分割字符串,它通過(guò)sep參數(shù)指定的分隔符來(lái)分割str參數(shù)指定的字符串,并返回分割后的每個(gè)子字符串
    2024-10-10
  • boost.asio框架系列之調(diào)度器io_service

    boost.asio框架系列之調(diào)度器io_service

    這篇文章介紹了boost.asio框架系列之調(diào)度器io_service,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • C/C++?Qt?數(shù)據(jù)庫(kù)與ComBox實(shí)現(xiàn)多級(jí)聯(lián)動(dòng)示例代碼

    C/C++?Qt?數(shù)據(jù)庫(kù)與ComBox實(shí)現(xiàn)多級(jí)聯(lián)動(dòng)示例代碼

    Qt中的SQL數(shù)據(jù)庫(kù)組件可以與ComBox組件形成多級(jí)聯(lián)動(dòng)效果,在日常開(kāi)發(fā)中多級(jí)聯(lián)動(dòng)效果應(yīng)用非常廣泛,今天給大家分享二級(jí)ComBox菜單如何與數(shù)據(jù)庫(kù)形成聯(lián)動(dòng),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-12-12

最新評(píng)論

玉环县| 廊坊市| 永登县| 呼和浩特市| 婺源县| 漾濞| 盖州市| 垦利县| 张家港市| 濮阳县| 江油市| 林州市| 定南县| 乌海市| 富源县| 独山县| 清流县| 临城县| 琼中| 贵定县| 都昌县| 贵德县| 通河县| 云阳县| 常州市| 卓尼县| 阜新| 筠连县| 兴隆县| 凯里市| 克什克腾旗| 盐池县| 友谊县| 武城县| 嘉荫县| 清新县| 且末县| 专栏| 宁海县| 铜鼓县| 平南县|