欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言冷門知識之你可能沒聽過的柔性數(shù)組

 更新時間:2021年10月12日 10:19:13   作者:執(zhí)久呀  
柔性數(shù)組(Flexible Array)是引入的一個新特性,它允許你在定義結(jié)構(gòu)體時創(chuàng)建一個空數(shù)組,而這個數(shù)組的大小可以在程序運行的過程中根據(jù)你的需求進行更改特別注意的一點是:這個空數(shù)組必須聲明為結(jié)構(gòu)體的最后一個成員,并且還要求這樣的結(jié)構(gòu)體至少包含一個其他類型的成員

一、簡述

在c99中有明確的規(guī)定允許結(jié)構(gòu)體中最后一個數(shù)組大小是未知的。

柔性數(shù)組其實是結(jié)構(gòu)體中的最后一個數(shù)組未說明大小,且結(jié)構(gòu)體中至少包含一個以上其他類型,如

#include<stdio.h>
 
struct hei 
{
  int zeng;
  char shi;
 
 int arr[];//或者int arr[0];
 
}ma;
 
int main()
{
struct hei ma;
 
return 0
}

二、具體使用

1.用創(chuàng)建柔性數(shù)組的方法:

#include<stdio.h>   
#include<stdlib.h>                     
                       
#include<stdlib.h>//或者是#include<malloc.h>動態(tài)內(nèi)存函數(shù)的頭文件                    
struct d
{                                                                                    
  int nb;  
  int nn;                                 
  
  int arr[];                 
};                         
                                 
int main()                      
{
    struct d *p=(struct d*)malloc(sizeof(struct d)+5*sizeof(int));//分別給結(jié)構(gòu)體中的除了柔
                                                  //性數(shù)組的其他類型和給柔性數(shù)組申請空間
     p->nb=100;
     p->nn=50;  
     
     for(int i=0;i<5;i++)
       {
         p->arr[i]=i;//賦值
         printf("%d ",p->arr[i]);
       }     
    struct d *pp=(struct d*)realloc(p,48); //重新調(diào)整所申請的空間,將柔性數(shù)組調(diào)整為40。
 
    if(pp!=NULL)
      {
        p=pp;
 
         for(i=5;i<10;i++)
         {
           p->arr[i]=i;//賦值
           printf("%d ",p->arr[i]);    
         } 
 
           free(p);
            p=NULL;
      }                                                                                                    
      return 0;                                                                           
}               

2.用普通的寫法

#include<stdio.h>
#include<stdlib.h>
struct bb
{
   int a;
   int *arr;
 
};
 int main()
{
  struct bb* p=(struct bb*)malloc(sizeof(struct bb));
 
   p->a=20;
   
   p->arr=(int*)malloc(5*sizeof(int));
 
   for(int i=0;i<5;i++)
      {  
       p->arr[i]=i;
       printf("%d ",p->arr[i]); 
  
      }
   int *ptr=(int*)realloc(p->arr,40);
  if(pp!=NULL)
   {
       p->arr=ptr;
     for(int i=5;i<10;i++)
        {
          int t=p->arr[i]=i;
          printf("%d ",t);
        }
 
   }
    free(p->arr); 
    p->arr=NULL;
    free(p);
   p=NULL;
     return 0;
 
}

三、柔性數(shù)組的特點

1.對比這兩種來看,柔性數(shù)組的特點在于只需要用一次malloc創(chuàng)建就可以,而普通的解法則需要兩

次,因為malloc申請的內(nèi)存位置是任意的,所以柔性數(shù)組可以減少內(nèi)存碎片化。

2.柔性數(shù)組申請的內(nèi)存更加集中,有利于查找使用。

3.sizeof求結(jié)構(gòu)體大小時所求出的大小沒有包括柔性數(shù)組的大小。

4.用malloc函數(shù)進行動態(tài)內(nèi)存申請時,柔性數(shù)組的大小應該大于結(jié)構(gòu)體的大小

以便于柔性數(shù)組適應預期大小。

5.柔性數(shù)組只用一次開辟,有利于提高訪問速度

------------------------------------------------------------------------------------------------------------------

小伙伴們有什么想法可以留言

到此這篇關于C語言冷門知識之你可能沒聽過的柔性數(shù)組的文章就介紹到這了,更多相關C語言 柔性數(shù)組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C語言隨機數(shù)生成教程(rand和srand用法)

    C語言隨機數(shù)生成教程(rand和srand用法)

    這篇文章主要介紹了C語言隨機數(shù)生成教程(rand和srand用法),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • 基于QT的TCP通信服務的實現(xiàn)

    基于QT的TCP通信服務的實現(xiàn)

    在項目開發(fā)過程中,很多地方都會用到TCP通信,本文主要介紹了基于QT的TCP通信服務的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • C++ 實現(xiàn)求最大公約數(shù)和最小公倍數(shù)

    C++ 實現(xiàn)求最大公約數(shù)和最小公倍數(shù)

    這篇文章主要介紹了c++ 實現(xiàn)求最大公約數(shù)和最小公倍數(shù)的相關資料,需要的朋友可以參考下
    2017-05-05
  • Qt自定義實現(xiàn)一個等待提示Ui控件

    Qt自定義實現(xiàn)一個等待提示Ui控件

    等待樣式控件是我們在做UI時出場率還挺高的控件之一,所以這篇文章主要為大家介紹了Qt如何自定義一個好看的等待提示Ui控件,感興趣的可以了解下
    2024-01-01
  • C語言實現(xiàn)簡易五子棋小游戲

    C語言實現(xiàn)簡易五子棋小游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單五子棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Opencv圖像處理之輪廓外背景顏色改變

    Opencv圖像處理之輪廓外背景顏色改變

    這篇文章主要為大家詳細介紹了Opencv圖像處理之輪廓外背景顏色改變,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • C++對string進行大小寫轉(zhuǎn)換操作方法

    C++對string進行大小寫轉(zhuǎn)換操作方法

    這篇文章主要介紹了C++對string進行大小寫轉(zhuǎn)換操作方法,本文通過兩種方法結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • 如何利用C語言實現(xiàn)最簡單的HTTP服務器詳解

    如何利用C語言實現(xiàn)最簡單的HTTP服務器詳解

    這篇文章主要給大家介紹了關于如何利用C語言實現(xiàn)最簡單的HTTP服務器的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用C語言具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-11-11
  • 數(shù)據(jù)結(jié)構(gòu) 紅黑樹的詳解

    數(shù)據(jù)結(jié)構(gòu) 紅黑樹的詳解

    這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu) 紅黑樹的詳解的相關資料,數(shù)據(jù)結(jié)構(gòu)中的二叉樹查找,紅黑樹的講解,需要的朋友可以參考下
    2017-07-07
  • C++基礎入門教程(二):數(shù)據(jù)、變量、宏等

    C++基礎入門教程(二):數(shù)據(jù)、變量、宏等

    這篇文章主要介紹了C++基礎入門教程(二):數(shù)據(jù)、變量、宏等,本文講解了變量初始化、宏定義、三種進制數(shù)的表示、const初探、auto聲明等內(nèi)容,需要的朋友可以參考下
    2014-11-11

最新評論