記憶體模型
常量區棧區
**區常量指標 和 指標常量
根據指標指向的位置的不一樣,指標也是有型別。指標定義和使用
#include
intmain()
int *p;定義乙個int *型別指標,p只能指向int型位址
指標在函式中的簡單應用
用指標在函式中修改變數的值
#include
void
fun1
(int x,
int y)
//交換兩個變數的值
void
fun2
(int
* x,
int* y)
//交換兩個變數的值
intmain()
列印結果:
原引數:3,4
fun1
():3,4
fun2
():4
,3
有人說是五區,把全域性靜態常量區分開,這個我就不深究記憶體四區
**區存放**二進位制
全域性靜態常量區
全域性變數、靜態變數,字串常量
棧區函式內部定義的變數,包括主函式裡面定義的變數
堆區手動申請釋放,指標管理malloc、free
堆區
標頭檔案:#include
#include
// for _max_path definition
#include
intmain()
return0;
}
這是乙個官方提供的malloc文件介紹
需要說明的是:
malloc是乙個函式,返回值是void*型別的指標,需要強轉成其他型別才能使用
malloc申請了一塊記憶體後需要判斷是否申請成功,並且用完之後要釋放。
標頭檔案#include記得加上
#include
#include
intmain()
printf
("申請的記憶體空間大小為:%d\n"
, size)
; p =
(int*)
realloc
(p,sizeof
(int)*
100)
; size =
_msize
(p);
printf
("重新申請的記憶體空間大小為:%d"
, size)
;free
(p);
return0;
}
列印結果:
申請的記憶體空間大小為:40
重新申請的記憶體空間大小為:400
_msize() 返回在堆中分配的記憶體塊的大小,返回值型別為 size_t
比malloc多了初始化操作 申請記憶體是比malloc要慢
free
(p);
p=null
;
野指標:
什麼是野指標?野指標就是指標指向的位置是不可知的(隨機的、不正確的、沒有明確限制的)
int
*p;//定義之後未初始化是乙個野指標
printf
("%d"
,*p)
;
int
*p =
(int*)
malloc
(sizeof
(int))
;free
(p);
//釋放完之後未置空 p=null;
printf
("%d"
,*p)
;
規避:int
*p=null
;
free
(p);
p=null
;
常量區常量區內容不可以修改
char
*p="hello world"
;//定義指標指向常量區 "hello world"在常量區
#include
#include
intmain()
棧區
棧區和堆區的區別:
所有在函式內部定義的變數,包括主函式裡面定義的變數,都儲存在棧區。
優點就是自動分配**,缺點是大小太小**區
字面意思,**存放的區域,了解一下就可以。
關鍵字:const
const 不可修改
const
int y =2;
//const修飾的變數定義的時候必須賦值 並且賦值之後不可修改
常量指標
const 修飾 *p
int const* p;const int* p;
#include
intmain()
指標常量
const 修飾 p
int* const p;
#include
intmain()
C語言筆記系列 六 指標
指標的值是位址,大多系統內部由無符號整數表示,但它是一種新的資料型別,不是整數型別。int n 20 printf d p n,n 分別輸出值和位址 四種宣告等價 intsum int a,int n intsum int int intsum int a,int n intsum int int ...
C語言隨筆(六)指標
指標,就是指記憶體位址,指標變數是用來存放記憶體位址的變數,不同型別的指標變數所占用的儲存單元長度是相同的,而存放資料的變數因資料的型別不同,所占用的儲存空間長度也不同。有了指標以後,不僅可以對資料本身,也可以對儲存資料的變數位址進行操作。定義指標 如下 int a 100 int p 定義乙個整型...
C語言基礎知識(六)(指標)
一 宣告和定義的區別 建立儲存空間的宣告稱為定義,不需要建立儲存空間的宣告稱為宣告。二 變數指標和指標變數 乙個變數的位址成為變數的指標。如果有乙個變數專門存放另一變數的位址,稱它為指標變數,也就是說指標變數的值是位址,例如 int pointer。指標變數的賦值 定義的時候初始化 int a 5 ...