記憶體的四區模型
ps:常量區在全域性區中
棧區和堆區
#include #include #include //堆
char *getmem(int num)
return p1;
}//棧
//注意 return不是把記憶體塊 64個位元組,給return出來
//而是把記憶體塊的首位址(比如記憶體的編號0xaa11) ,返回給 tmp
// 理解指標的關鍵是記憶體,沒有記憶體**來的指標
char *getmem2()
void main(void)
strcpy(tmp, "111222"); //向tmp做指向的記憶體空間中copy資料
tmp = getmem2(); //tmp = 0xaa11;
return 0;
}
全域性區#include char * getstr1()
main函式中可以在棧/堆/全域性分配記憶體,都可以被func1和func2使用
func2在棧上分配的記憶體,不能被func1和main函式使用
func2中malloc的記憶體(堆),可以被main和func1函式使用
func2中全域性分配「abcdefg」(常量全域性區)記憶體,可以被func1和main函式使用
棧的生長方向和記憶體存放方向
二級指標
間接賦值*p是指標存在的最大意義
#include using namespace std;
void fun1(int *p){
p=(int *)0x7fff56dae9d7; //這裡的p是在棧區,這樣做並不會修改p1指標所指向的記憶體位址
cout條件編譯
條件編譯的作用
1)防止標頭檔案被重複包含引用
2)軟體裁剪
同樣的c源**,條件選項不同可以編譯出不同的可執行程式。
二級指標和記憶體四區的模型
看了一下前面寫的關於指標見解,以及關於記憶體四區的見解,然後感覺寫的不是特別清楚,然後自己就畫了一張圖來表示他們之間的關係,我想如果能看懂我這張圖,記憶體四區以及二級指標差不多就明白了 下面先上 1 define crt secure no warnings 2 include 3 include ...
程式的記憶體模型 記憶體四區
在程式編譯後,生成了exe可執行程式,未執行該程式前分為兩個區域 區和全域性區 區 存放函式體的二進位制 由作業系統進行管理 存放cpu執行的機器指令。區是共享的,共享的目的是對於頻繁被執行的程式,只需要在記憶體中有乙份 即可。區是唯讀的,使其唯讀的原因是防止程式意外地修改了它的指令 全域性區 存放...
二級指標的記憶體模型小結
the start 此處定義 主調函式分配記憶體,稱之為輸入 被調函式分配記憶體,稱之為輸出 指標是為記憶體服務的。二級指標做輸入 第一種型別 include stdio.h include stdlib.h include string.h intprintfstr char str,int st...