C語言中怎麼把數字存放在記憶體的指定地址上記憶體地址是用malloc分配的

2021-09-03 07:05:00 字數 3211 閱讀 2631

1樓:匿名使用者

1.定義int a

2。定義指標 p int *p ; p=a2.強制轉換 malloc 分配的地址型別 使它等於pp= (int *) malloc()

2樓:匿名使用者

c語言:

int* ptr = (int*)malloc(sizeof(int)); //分配記憶體

*ptr = 100; //對ptr指向的記憶體賦值100free(ptr); //用完之後釋放

c++int* ptr = new int;

*ptr = 100;

delete ptr;

win32程式可以呼叫windows api:

int* ptr = (int*)heapalloc(getprocessheap(), heap_zero_memory, sizeof(int));

*ptr = 100;

heapfree(ptr);

3樓:

int n;

char *p;

p = (char *)malloc(100);

n=2011;

memcpy(p,&n,sizeof(n));

4樓:匿名使用者

int *p = (int *)malloc(100);

c語言 malloc()函式 分配記憶體空間尺寸的問題

5樓:王斌隨

這個問題首先得從堆疊說起,一個程式一般分為三段:**段,資料段(靜態資料),和堆疊段。堆疊段儲存程式中的變數、程式傳遞的引數等(動態分配的變數儲存在堆中,靜態分配的儲存在棧中)。

堆疊的增長方式如下:

程式在執行的時候會預先分配堆疊空間,所以你的問題中不一定修改了不該修改的地方,有可能那裡本來就是空的。

再回到malloc這個函式上來,malloc主要負責分配空間,返回該空間的首地址。那為什麼申請空間為0,卻可以儲存7個字元呢?那是因為c語言的指標中並不檢查陣列的越界問題,不信的話,你可以這樣:

char ch[5],然後你去讀寫ch[6](printf或scanf),這樣是不會報錯的。但是我們在使用的時候,千萬別越界使用,因為這樣的程式是非常危險的,試想,如果越界使用的地址正好是一個作業系統的地址,那麼你一修改,系統就崩了。同時,c語言的這個機制被黑客廣泛地應用與緩衝區溢位攻擊,所以你非但不能越界使用指標,還得時刻考慮到指標(陣列)是否越界,以加強程式的安全性。

希望對你有所幫助。。。

6樓:樂跑小子

c語言中malloc是動態記憶體分配函式。

函式原型:void *malloc(unsigned int num_bytes);

引數:num_bytes 是無符號整型,用於表示分配的位元組數。

返回值:如果分配成功則返回指向被分配記憶體的指標(此儲存區中的初始值不確定),否則返回空指標null。void* 表示未確定型別的指標,void *可以指向任何型別的資料,更明確的說是指申請記憶體空間時還不知道使用者是用這段空間來儲存什麼型別的資料(比如是char還是int或者...

)功能:分配長度為num_bytes位元組的記憶體塊

注意:當記憶體不再使用時,應使用free()函式將記憶體塊釋放。函式返回的指標一定要適當對齊,使其可以用於任何資料物件。

關於該函式的原型,在以前malloc返回的是char型指標,新的ansic標準規定,該函式返回為void型指標,因此必要時要進行型別轉換。

例項:#include"stdio.h"

#include"malloc.h"//malloc()函式被包含在malloc.h裡面

int main(void)

sprintf(a,"%s","helloworld\n");//"helloworld\n"寫入a指向的地址

printf("%s\n",a);//輸出使用者輸入的資料

free(a);//釋放掉使用的記憶體地址

return0;}

7樓:匿名使用者

你何必糾結一定要分配使用者輸入字元數量長度的空間呢?開一個足夠大的陣列不就得了?

如果你一定要malloc準確的大小,你可以char *c;

char *s=malloc(100000*sizeof(char));//malloc一個足夠大的陣列,暫時儲存輸入

scanf("%s",s);

c=(char*)malloc(strlen(s)*sizeof(char));

strcpy(c,s);

free(s);//輸入結束後把輸入儲存,再把這個大陣列釋放

8樓:匿名使用者

malloc是給指標變數分配記憶體空間的函式命令正確使用:

分配的空間要能保證容下你想儲存的資料,不要和機器逗著玩(分配0空間,或少於自己實際需要的空間),如你上面的操作,表面上你程式執行沒有問題,可實際上你佔用了別人的地盤,只是當前你很幸運沒有使程式出現問題,但不保證一定不出問題!!

不再使用的指標,一定要free()來釋放空間!malloc 與free要配對使用,即:有malloc必要有free

c語言中,怎麼使用malloc函式為陣列指標分配空間 比如要為char *p[ ]分配空間,應該怎麼弄

9樓:

指標陣列和陣列指標是兩個不同概念,你這裡給出的定義例項實際上是指標陣列的定義。

指標陣列是指所定義陣列的每個陣列元素都是一個相應資料型別的指標,開設空間的操作可以應用迴圈語句進行,例如:對於char *p[10]; 可以應用

for(i=0;i<10;i++)

p[i]=(char *)malloc(sizeof(char)*n); //為每個指標申請開設n字元的儲存空間

開設後,對於p的使用與二維陣列的使用格式類似,可以有效的使用兩個下標,

如 p[0][0]='a';

還可以像每個指標中賦值字串: p[2]="beijing"; 當然字串長度應該小於n。

而陣列指標,是指定義為指向某個固定大小順序空間的指標,定義的格式如下:

char (*pa)[10]; //定義一個指向擁有10元素的字元陣列的指標,

int (*p)[10];

應用格式可以參考下述程式,申請空間、賦值、輸出後,可以觀察到100被賦值到第五行第十個元素,指標可以像二維陣列一樣通過兩個下標引用所申請開設的空間。

#include

main()}

c語言程式設計從鍵盤輸入n個整數存放在一維陣列a中

int main if i else printf 沒有資料 d x return 0 4 程式設計實現以下功能 用c語言程式設計,在主函式中,由鍵盤輸入10個互不相同的整數存放在一維陣列a include void myout int arr,int n int delx int arr,int ...

vue怎麼把不同的多選題答案分開存放在陣列中

function findval onearray var tempary for var i 0 i 能看一下具體的資料結構嘛?vuejs如何把在集合中過濾的結果放在一個陣列中 function findval onearray var tempary for var i 0 i vue 請問這個...

在c語言中,有效數字和有效數位怎麼解釋

1 在c語言中,一個數的有效數字取決於該數字所屬的型別。2 舉例如內下 如果數12.3是int型別,那麼 容12就是該數的有效數字,小數部分無效 如果數12.3是float型別,那麼12.3就是該數的有效數字。如果數字超過其型別所能表示的範圍,那麼其就沒有效數字。以下所述bai都指vc6.0環境,其...