c語言分配地址
⑴ c語言 分配一個超大的內存地址
可能是我沒太看懂樓主的意思啊
個人還是覺得樓主可能是沒搞懂malloc的用法
malloc可以申請到內存中可以申請的最大大小 一個int不算啥
樓主是想做什麼呢?
如果要給其他類型的參數分配空間就要
type *a=(type *)malloc(sizeof(type));
比如double
double *a=(double *)malloc(sizeof(double));
自己定義的類型當然也行
而如果是要分配多個int空間 比如m個
這么行就行了 malloc(m*sizeof(int));
⑵ C語言,在循環中定義一個變數的地址分配問題
1、理論上是不一樣的。但是在實際中,如果僅僅是進行這樣的循環,那麼地址是不變的,這是因為剛剛i被分配的地址釋放後沒被其他量占據,所以爛粗爛再分配的時候還是在原來凳粗的地方進行。
2、可以寫個程序來檢測下,檢測的方法自然飢漏是單步運行,查看a的地址比如下面的程序,可以查看&a和p的值,會發現&a的值不會變,而p的值由一個系統給它分配的地址變為a的地址之後就不會再變,它的值和&a的值始終一樣且不變。
⑶ C語言動態分配 地址
沒有太並辯多的道理。
這是C語言 實參 調用方法 帶來的 困惑。
通過函數參數只能把值傳回來,不能把地址帶回來棚知。
除非用 getmemory(char **p) {...} 可以通過函數參數把地址帶回來。但語法上,不如通過函數返回指針好理解。
char * getmemory(char *p) 通過函數返回指針,能把地址送回來。(記住這種方法。鏈蔽消)
str=getmemory(str);
printf("str size: %d\n",_msize(str)); // 可以列印出分配了多少內存單元。
「引用」是 c++里的概念。這里不討論。
⑷ C語言中幾個字元串指針如何分配內存地址
在C語言中,可以用字元數組或字元串指針兩種方法存儲幾個字元串,分配呢?很多教科書中未提到,下面舉例來討論。 例1.用字元數組實現 main()strl一 {statie ehar strl[〕~即ehina即; inta~1, statie ehar strZ[]~,student開; fioatb~1.5, statie ehar。trl);/一列印stri地址的字元數組內容,/ Printf(,%lu即,strZ), printf(,寫s\n即,strZ), Printf(即寫lu即,str3); Printf(階%s\n即,str3),str3一 printf(,阮=魷lua=%d」,腸,a),/一列印a的地址與a值一/ Printf(」乙b=%lub~%f,,肺,b),/,列印b的地址與b值./那麼這幾宇符串的內存地址是如何C .ha\0t u d ent\0 bo\0 }
⑸ C語言中內存地址是如何分配的
比如定義一個整型變數a,int a;實際上就已經給這個a分配了4個位元組的內存地址
⑹ C語言數組定義地址分配問題
使用C語言編程,實際上使用的內存只有一種——虛擬內存。根據功能的不同在C語言中又將虛擬內存為分三類:棧區、堆區、靜態數據區,無論單一變數還是數組,其內存分配都是如此。其中,棧區、靜態數據區、堆區都會有編譯器負責分配、操作系統負責管理,程序員可以在堆區使用malloc()來動態分配堆內存。
1、棧區:一般每一個函數對應一個棧區,在編譯原理中稱為棧幀。比如下面的代碼:
int main()
{
//定義一個有20個int元素的數組。此時數組a分配的虛擬內存稱為棧區,有編譯器自行分配。
int a[20] = {0};
return 0;
}
2、靜態數據區:這實際上對應於生成的可執行文件的.data區段,因為這個區段在生成的可執行文件中,因此是「靜態的」。比如下面的代碼:
//定義一個20個int元素的全局數組,此時數組分配的虛擬內存稱為靜態數據區,有編譯器自行分配。
int g_a[20];
int main() { return 0;}
3、堆區:堆區是最復雜的,有操作系統負責堆管理,但是當用C語言編譯器生成一個可執行文件並且運行時,它會默認建立一些堆。拿Windows來說,每一程序運行,它會建立至少兩個堆,一個是默認堆,一個是new堆。比如下面的代碼:
int main()
{
int *pa = (int*)malloc(sizeof(int)*20);//分配20個int元素大小的堆空間。
return 0;
}