c語言給指針分配內存
❶ 什麼叫做malloc函數
malloc函數是c語言中的一個內存分配函數,用於動態地分配內存空間。malloc函數返回一個指向所分配內存空間的指針,可以通過這個指針來訪問和操作所分配的內存空間。如果內存分配失敗,則返回NULL。
malloc函數的語法:void* malloc(size_t size);
其中,size_t是unsigned long或unsigned int類型,表示要分配的內存空間的大小,單位是位元組。malloc函數返回一個指向所分配內存空間的指針,如果內存分配失敗,則返回NULL。
malloc函數的使用方法如下:
在這個示常式序中,我們首先使用malloc函數分配了一個int類型的內存空間,並將這個內存空間的指針賦值給指針變數p。然後,我們檢查內存分配是否成功,如果內存分配失敗,則輸出錯誤信息並返回0。如果內存分配成功,則給所分配的內存空間賦值,並輸出p的值。最後,我們使用free函數釋放了所分配的內存空間。
♡♡ 有幫助到的話,麻煩採納哦!♡♡
❷ c語言:為結構體指針的指針開辟空間
struct stu
{
int a[]; //!!
}; //--丟失逗號
int main()
{
int i=0,j=0;
struct stu *p;
// p=malloc(10*sizeof(p)); //為p開辟空間,成功
p= (stu*)malloc(10*sizeof(stu));//分配後的空間需要強轉為stu* 才可以賦值給P類型一樣。
if(p==NULL){ //檢查申請是否成功
return false;
}
//p->a=malloc(10*sizeof(int)); //不知道成功沒----對於struct,對齊的大小也是最大的基本元素的對齊大小,對象的大小需要考慮元素的對齊,並且需要是最大基本元素的整數倍。(參考下struct和union的內存對齊方式)
//所以不必再為結構體內部申請空間。 另外int *a, 申請多大的空間也沒用啊 就一個int型 所以結構體裡面定義為int a[]或者定義結構體數組。
for(i=0;i<10;i++){
for(j=0;j<10;j++){
scanf("%d",p->a+j); // error C2059: syntax error : '('----info 不知道你是怎麼定義的,scanf("%d",p->a+j);
}
}
return 0;
}
❸ C語言中,定義一個指針的時候為這個指針開辟存儲空間嗎
Int*p:第一級指針,表示p點所在地址是一個100Int類型的值,p被聲明為一個指向整數的指針,並且為這個指針分配了存儲空間。但在這種情況下,它是一個隨機數,我們稱之為指向一個不確定的內存地址。
當用戶說「direct*p=5」時,在一個不可預知的內存地址上寫入一個整數5。這是不允許的,並可能導致程序崩潰。
P = & a;然後,將現有變數a的地址寫入指針p,我們說指向a的指針可以通過變數p對變數a進行正常操作。
(3)c語言給指針分配內存擴展閱讀:
指針:
指針的表示法是地址,核心是指向關系的指針,操作符「*」的作用是根據關系訪問所指向的對象。如果版本與B有指向關系,則A為B的地址,「*A」表示通過該指向關系間接訪問B。
如果B的值是一個指針,它指向C,BC地址,間接訪問,CB「*」如果C是整數,真實的,或結構,如類型變數或數組元素對於這些類型的數據,BC(即地址)是通用的指針,即主要指的是右邊的針,持有一級指針變數指針變數。
❹ C語言動態內存函數分配問題
你的問題是剛剛學習指針的人都有的問題,需要從地址來認識這個問題,C語言的數據都是需要申請空間來存放的,有靜態和動態兩種,動態分配的空間大小可以按需要分配,並且可以回收,靜態是不可以回收的。
首先,分配動態的空間,指針P和空間的首地址是沒有直接的聯系的,只是為了手續要使用這個剛剛分配的空間才讓P指針指向這個剛剛分配的空間的首地址的話,如果還不理解,你可以反向想想如果你分配的這個空間,而不用P指針指向這個首地址,那麼你如何使用這個空間呢?
void型是針對地址型的直接分配,為什麼不是分配char的空間呢?因為C語言和硬體關系密切,
有寫硬體他的地址不是8位存儲的,是16位,或者是32位的,那麼這個void就忽略了這個硬體地址寬位就分配100個地址就是了,然後,強制轉換成char的8位,如果硬體是16位了,那麼,每個地址就會多分配了8位,而使用前8為來存儲空間了。
返回的指針是分配的100個地址的首地址,不是這個指針P,舉個例子吧,空間可以看做是一個隊伍,他本身就有一個領頭的人,那麼P就是一個單獨的人,那麼,我們如果像要找到這個隊伍,需要先找到隊伍的領頭人,領頭的人只在你申請的時候出現一次,後面,你就找不到他了,怎麼辦?你把他電話給P吧,P可以找到他。呵呵。
如果還是不理解,那就不要理解了,建議去吧隊列的方式,用指針和動態分配內存的方式實現一次,就知道了,不能照著書本抄,全部代碼要自己寫出來,就肯定理解了。