當前位置:首頁 » 編程語言 » c語言申請

c語言申請

發布時間: 2025-02-27 15:23:57

c語言關於malloc申請字元串的語法

//可以連續申請地址的,這樣寫就相當於a[20]了。
char*a=(char*)malloc(sizeof(char)*20);

注意用malloc申請,後建議判斷指針是否為NULL,再使用該指針,避免申請失敗,程序出錯。

malloc申請的地址不會自動釋放,需要free釋放。

malloc申請的連續地址空間,想要改變大小,可以用realloc來改變。

㈡ c語言問題(student*)malloc(sizeof(student))

C語言動態申請數組(結構體)空間的應用,以下面一段代碼為例,你可以參考一下。
#include<stdio.h>#include<stdlib.h>#include<malloc.h>//包含malloc函數的頭文件struct Item//定義結構體{ char name[20]; int num; };struct Item *I;//申請Item類型的指針int A()//進行內存申請{ int i,j; int n;//申請的數量 scanf("%d",&n); I=(struct Item*)malloc(sizeof(struct Item)*n); return n; }int Input()//數據輸入函數{ int n=A(); int i,j; for(i=0;i<n;i++) { printf("%d Name:",i+1); scanf("%s",&I[i].name); printf("num:\n"); scanf("%d",&I[i].num); } return n; }void output()//數據輸出函數{ int n=Input(); for(int i=0;i<n;i++) { printf("%d |",i); printf("Name:%s ",I[i].name); printf("num:%d\n",I[i].num); }}int main(){ output(); return 0;}望採納!

㈢ c語言申請內存int c[8192][8192]需要多少內存

需要申請多少內存: 8192*8192*sizeof(int)
用 sizeof(變數類型) 較好。因為編譯器對1個 int 佔多少位元組 並不統一,大多數是4,少數 2,或 8。

㈣ C語言中堆和棧的區別

(1)申請方式
stack:
由系統自動分配。例如,聲明在函數中一個局部變數 int a; 系統自動在棧中為a開辟空間
heap:
需要程序員自己申請,並指明大小,在c中malloc函數
如m1 = (char *)malloc(10);
在C++中用new運算符
如m2 = (char *)malloc(10);
注意:m1、m2本身是在棧中的。

(2)申請後系統的響應
棧:只要棧的剩餘空間大於所申請空間,系統將為程序提供內存,否則將報異常提示棧溢出。
堆: 首先應該知道操作系統有一個記錄空閑內存地址的鏈表,當系統收到程序的申請時,會遍歷該鏈表,尋找第一個空間大於所申請空間的堆結點,然後將該結點從空閑 結點鏈表中刪除,並將該結點的空間分配給程序,另外,對於大多數系統,會在這塊內存空間中的首地址處記錄本次分配的大小,這樣,代碼中的delete語句才能正確的釋放本內存空間。另外,由於找到的堆結點的大小不一定正好等於申請的大小,系統會自動的將多餘的那部分重新放入空閑鏈表中。
(3)申請大小的限制及生長方向
棧:在Windows下,棧是向低地址擴展的數據結構,是一塊連續的內存的區域。這句話的意思是棧頂的地址和棧的最大容量是系統預先規定好的,在WINDOWS下,棧的大小是2M(也可能是1M,它是一個編譯時就確定的常數),如果申請的空間超過棧的剩餘空間時,將提示overflow。因此,能從棧獲得的空間較小 。
堆:堆是向高地址擴展的數據結構,是不連續的內存區域。這是由於系統是用鏈表來存儲的空閑內存地址的,自然是不連續的,而鏈表的遍歷方向是由低地址向高地址。堆的大小受限於計算機系統中有效的虛擬內存。由此可見,堆獲得的空間比較靈活,也比較大。
(4)申請效率的比較:
棧由系統自動分配,速度較快。但程序員是無法控制的。
堆是由new分配的內存,一般速度比較慢,而且容易產生內存碎片,不過用起來最方便.
另外,在WINDOWS下,最好的方式是用VirtualAlloc分配內存,他不是在堆,也不是在棧是直接在進程的地址空間中保留一快內存,雖然用起來最不方便。但是速度快,也最靈活。
(5)堆和棧中的存儲內容
棧:在函數調用時,第一個進棧的是主函數中後的下一條指令(函數調用語句的下一條可執行語句)的地址,然後是函數的各個參數,在大多數的C編譯器中,參數是由右往左入棧的,然後是函數中的局部變數。注意靜態變數是不入棧的。
當本次函數調用結束後,局部變數先出棧,然後是參數,最後棧頂指針指向最開始存的地址,也就是主函數中的下一條指令,程序由該點繼續運行。
堆:一般是在堆的頭部用一個位元組存放堆的大小。堆中的具體內容有程序員安排。

熱點內容
c語言看編譯步驟快捷鍵 發布:2025-02-27 18:04:15 瀏覽:302
python爬蟲高級項目 發布:2025-02-27 17:43:12 瀏覽:373
webkit源碼 發布:2025-02-27 17:41:37 瀏覽:815
區域網拒絕訪問 發布:2025-02-27 17:41:31 瀏覽:401
上傳思想匯報 發布:2025-02-27 17:39:26 瀏覽:752
內核編譯配置 發布:2025-02-27 17:38:31 瀏覽:982
解壓沙泥 發布:2025-02-27 17:38:30 瀏覽:843
exe資源打包加密器破解 發布:2025-02-27 17:36:22 瀏覽:582
污游戲腳本 發布:2025-02-27 17:32:59 瀏覽:731
安卓相機膠卷與照片如何同步 發布:2025-02-27 17:14:44 瀏覽:95