當前位置:首頁 » 編程語言 » 擴容c語言

擴容c語言

發布時間: 2022-10-28 13:19:53

『壹』 c語言中的問題

沒辦法的,數組在棧里。必須定長。
維一的替代方案是用指針在堆里分配內存取代數組,需要變長時realloc。

『貳』 c語言動態數組如何擴充空間

c語言動態數組擴充空間,主要是利用動態存儲分配庫函數來實現的,常用的有malloc函數和calloc函數。

malloc()是C語言中動態存儲管理的一組標准庫函數之一。其作用是在內存的動態存儲區中分配一個長度為size的連續空間。其參數是一個無符號整形數,返回值是一個指向所分配的連續存儲域的起始地址的指針。

例如:

char *x;

x = (char *)malloc(10); //x就指向了包含10個字元單元的存儲空間。

(2)擴容c語言擴展閱讀:

函數定義

其函數原型為void *malloc(unsigned int size);其作用是在內存的動態存儲區中分配一個長度為size的連續空間。此函數的返回值是分配區域的起始地址,或者說,此函數是一個指針型函數,返回的指針指向該分配域的開頭位置。

如果分配成功則返回指向被分配內存的指針(此存儲區中的初始值不確定),否則返回空指針NULL。當內存不再使用時,應使用free()函數將內存塊釋放。函數返回的指針一定要適當對齊,使其可以用於任何數據對象。

『叄』 C語言中,字元數組會自動擴容嗎

不會自動擴容,你這個賦值其實已經越界了,但是編譯器不會檢查是否越界,所以可以編譯,不報錯。
需要注意:越界之後,可能會出現不可預料的問題,也就是很多書上說的,行為未定義,所以應該特別注意這種情況

『肆』 c語言數據結構里的false、error、overflow、infeasible用法好像啊。分別用在什麼地方啊

overflow一般用於exit的參數中,比如創建指針時,一般判斷一下內存是否分配成功,不成功一般調用returnexit(overflow);

infeasible其意思是不可行的,一般在某個判斷中,如果什麼什麼不可行,就會returninfeasible例如:求後繼元素時,如果是最後一個元素,則求其後繼是不可行的,此時就會returninfeasible;

很多函數的返回類型都是Status,這里Status是用typedef定義的intl類型即:typedefintStatus;在這樣的函數中根據不同情況返回ture或falseok或error。

StatusListEmpty(SqListL)

{

//若L為空表,則返回TRUE,否則返回FALSE

if(L.length==0)

{

returnTRUE;

}

else

{

returnFALSE;

}

}

StatusGetElem(SqListL,inti,ElemType*e)

{

//用e返回L中的第i個元素的值,1=<i<=ListLength(L)

if(i<1||i>L.length)

{

returnERROR;

}

*e=*(L.elem+i-1);

returnOK;

}

(4)擴容c語言擴展閱讀

C語言append()方法為切片添加元素

Go語言的內建函數append()可以為切片動態添加元素。 每個切片會指向一個底層數組,這個數組能容納一定數量的元素。

當底層數組不能容納新增的元素時,切片就會自動按照一定的策略進行「擴容」,此時該切片指向的底層數組就會更換。「擴容」操作往往發生在append()函數調用時。 舉個例子:

『伍』 【懸賞】數據結構,c語言版本。順序表那塊,擴容函數問題,謝謝!

為謹慎起見,必須對realloc結果進行檢查,
1. realloc失敗的時候,返回NULL
2. realloc失敗的時候,原來的內存不改變,不會釋放也不會移動
3. 假如原來的內存後面還有足夠多剩餘內存的話,
realloc的內存=原來的內存+剩餘內存,realloc還是返回原來內存的地址;
假如原來的內存後面沒有足夠多剩餘內存的話,realloc將申請新的內存,然後把原來的內存數據拷貝到新內存里,原來的內存將被free掉,realloc返回新內存的地址。
所以從你的函數代碼來看,不應該在此時free

『陸』 C++ 中new擴充已申請的內存空間

C++不能像C一樣通過某個關鍵字擴充空間。雖然樓上說可以用容器,確實是可以用容器,但是容器放數據可以自動擴充,刪除數據空間不會縮小。不過再怎麼說也比realloc使用安全,一般情況下很多軟體開發公司不允許使用realloc。所以提前確定空間大小反而是最好的。

『柒』 C語言里結構體的問題。結構體定義指針類型是怎麼回事

typedef 是重定義的意思,這里表示HuffmanCode是一個char**類型的代名詞。
char*可以理解為指向一個字元串第一個字元的指針。
char**可以理解為字元串數組,
char **a = new char* [10];
for (int i = 0; i < 10; i++) a[i] = new char [30];
這就創建了一個a,a[n]代表第n+1個字元串,a[n][m]表示第n+1個字元串的第m+1個字元。

typedef struct
{
unsigned int weight;
unsigned int parent,lchild,rchild;
} HTNode,*HuffmanTree;
是用HTNode表示這個結構體,HuffmanTree表示這個結構體的指針類型。這樣使用HTNode 定義的變數是結構體類型(空間為4*int=16),而用HuffmanTree定義的是可以指向這種結構體的指針(空間為long=4),HuffmanTree與HTNode*等價。
HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode))
HT=(HTNode*)malloc((m+1)*sizeof(HTNode))
下面是調用的例子:
HTNode a;
HuffmanTree b;
a.lchild=0;
b=&a;
b->lchild=0;

calloc也用於動態分配內存,和malloc稍有區別,網路你就知道。

『捌』 C語言(數據結構),順序表及鏈表的問題

1..順序表的後插(入)的C程序#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define LIST_INIT_SIZE 100 //順序表初始容量(能容納的元素個數)#define LISTINCREMENT 10 //容量增量typedef int ElemType; //元素類型ElemType為inttypedef int Status; //函數返回值類型Status為int//定義順序表類型SqList:typedef struct{ElemType *elem; //存儲空間基址(順序表的起址)</p><p _extended="true">int length; //當前長度</p><p _extended="true">int listsize; //當前容量</p><p _extended="true">}SqList;/* 初始化:構造一個空的順序表L 初始容量 LIST_INIT_SIZE */Status InitList_Sq(SqList *L){unsigned int nSize;</p><p _extended="true">nSize = LIST_INIT_SIZE * sizeof(ElemType);//欲分配空間位元組數</p><p _extended="true">L->elem = (ElemType *)malloc(nSize);//分配初始的存儲空間</p><p _extended="true">if (!L->elem) //若未分配成功,</p><p _extended="true">exit(-1); //則終止程序(退出碼-1)</p><p _extended="true">L->length = 0; //初始長度</p><p _extended="true">L->listsize = LIST_INIT_SIZE; //初始容量</p><p _extended="true">return 1; </p><p _extended="true">}//InitList_Sq/* 追加:將c追加到表L末尾。*/Status ListAppend_Sq(SqList *L, ElemType a){ unsigned int nSize; ElemType *newbase, *p, *q; //若表容量不夠則擴展: if (L->length >= L->listsize) //若滿容, { //則擴容: L->listsize += LISTINCREMENT; //新容量 nSize = L->listsize * sizeof(ElemType);//欲分配空間位元組數 newbase = (ElemType *)realloc(L->elem,nSize);//重新分配空間 if (!newbase) //若未分配成功, exit(-1); //則終止程序(退出碼-1) }L->elem[L->length]=e; //e插入順序表末尾 ++L->length; //表長加1 return 1; }//ListAppend_Sq2.單鏈表的頭插(入)的C程序(這兒使用的是帶頭結點的單鏈表為例)#include <stdio.h>#include <stdlib.h>#include <malloc.h>typedef char ElemType;//元素類型ElemType為chartypedef int Status; //函數返回值類型Status為int//定義單鏈表類型LinkList:typedef struct LNode{ElemType data; //數據域</p><p _extended="true">struct LNode *next; //指針域(鏈域)</p><p _extended="true">}LNode, *LinkList;/* 以上定義了單鏈表結點類型LNode及指向表結點的指針類型(單鏈表類型)Linklist。 *//* 初始化:構造一個空的單鏈表L */Status InitList_L(LinkList *L) {LNode *h;</p><p _extended="true">h = (LNode *)malloc(sizeof(LNode));//申請頭結點空間</p><p _extended="true">if (!h) //若未申請成功,</p><p _extended="true">exit(-1); //則終止程序(退出碼-1)</p><p _extended="true">h->next = NULL; //頭結點鏈域置空</p><p _extended="true">*L = h; //表頭指針指向頭結點</p><p _extended="true">return 1; </p><p _extended="true">}//InitList_L/* 頭插若干個結點,結點值v。*/void Headinsert_L(LinkList L, ElemType v){LNode *head, *p;ElemType c;head = L; c = v; //c指向當前結點值位置p = (LNode *)malloc(sizeof(LNode));//申請新結點空間p->data = c; //新結點值p->next = head->next; head->next = p;}//Headinsert3.單鏈表的在i的位置之後插(入)的C程序//預定義、頭文件、單鏈表的結點結構定義、初始化等同上/* 按位序查找:(頭結點看作第0個結點)找出單鏈表L的第i個結點並返回指向該結點的指針若i<0或i>表長,則返回NULL*/LNode *GetNode_L(LinkList L, int i){LNode *p;int c = 0; //計數器置0p = L; //當前結點為頭結點//從頭結點開始搜索:while ((c < i) && (p->next != NULL)){//若未到位且下一結點存在,則搜索下一結點c++; //計數器加1p = p->next;//下一結點作為當前結點}//end whileif (c == i) //若搜索了i步,return p; //則返回最後搜索點;else //否則,return NULL;//返回NULL}//GetNode_L/* 插入:在單鏈表L的位置i前插入元素e若插入成功返回OK,否則返回ERROR。演算法步驟:1. 找出第i結點前驅pre2. 生成新結點3. 新結點值置為e4. 使新結點指向pre的後繼5. 使pre指向新結點*/Status ListInsert_L(LinkList L,int i,ElemType e){LNode *pre, *pnew;</p><p _extended="true">pre = GetNode_L(L, i-1);//找出第i結點前驅</p><p _extended="true">if (!pre) return 0; //若未找到則退出</p><p _extended="true">pnew = (LNode *)malloc(sizeof(LNode));//申請新結點空間</p><p _extended="true">pnew->data = e; //新結點值置為e</p><p _extended="true">pnew->next = pre->next; //新結點指向pre的後繼</p><p _extended="true">pre->next = pnew; //pre指向新結點</p><p _extended="true">return 1;</p><p _extended="true">}//ListInsert_L

熱點內容
C語言海燕 發布:2025-01-06 04:42:22 瀏覽:940
誇克緩存視頻都是幾k怎麼辦 發布:2025-01-06 04:32:29 瀏覽:464
are編程 發布:2025-01-06 04:30:45 瀏覽:536
伺服器我的世界怎麼弄積分 發布:2025-01-06 04:24:32 瀏覽:738
小白源碼資源站 發布:2025-01-06 04:23:07 瀏覽:651
劍靈刷本腳本 發布:2025-01-06 04:21:33 瀏覽:687
2014編程語言 發布:2025-01-06 04:20:51 瀏覽:941
linuxcomm 發布:2025-01-06 04:15:02 瀏覽:291
指紋類演算法 發布:2025-01-06 04:01:46 瀏覽:412
代理伺服器ip樣式 發布:2025-01-06 03:59:53 瀏覽:90