指針變量、指針常量與常量指針
一、指針變量
定義:指針變量是指存放地址的變量,其值是地址。
一般格式:基類型 指針變量名;(int p)
關(guān)鍵點:
1、int * 表示一種指針類型(此處指int 類型),p(變量名)即為定義的指針變量名。
2、在定義指針變量時必須指定基本類型,知道數(shù)據(jù)類型,才能按存儲單元的長度以及數(shù)據(jù)的存儲形式正確地取出數(shù)據(jù)
3、指針變量中只能存放合法的地址類型,不要將其他類型數(shù)據(jù)賦給指針變量
4、“ * ”指針運算符,表示指針變量所指向的變量,“ & ”取地址運算符,表示取變量的地址
5、引用指針變量主要有以下三種情況
int date = 0; //定義變量
int *Pointer; //定義指針變量
//1、給指針變量賦值
Pointer = &date;//把date 的地址賦給指針變量pointer,指針變量pointer的值時變量date 的地址,pointer指向date
//2、引用指針變量指向的變量
printf("%d",*pointer); //輸出指針變量pointer所指向變量的值,即變量date的值(*pointer等價于date)
*pointer = 1; //將整數(shù)1賦值給指針變量pointer所指向的變量的值,即相當(dāng)于把1賦值給date ,等價于“date = 1”
//3、引用指針變量的值
printf("%p",pointer);//以八進(jìn)制數(shù)形式輸出指針變量pointer的值,即date 的地址(&date )
注意事項:
1、指針變量作為一種變量類型,可以作為數(shù)組成員(指針數(shù)組)、函數(shù)參數(shù)、和函數(shù)返回值(指針函數(shù)),甚至可以作為保存數(shù)組地址(數(shù)組指針)或函數(shù)地址的變量(指針函數(shù))。
2、指針變量可進(jìn)行以下幾種運算操作:
二、指針常量
定義:是一個常量,其值是指針,這個值因為是常量,所以不能被賦值。
個人理解就是把他看成一個地址格式的常量數(shù)據(jù),比如在32位機(jī)器上有一個地址格式的常量數(shù)據(jù):0x0000FFF1,首先它是作為一個常量存在,我們沒辦法改變它的數(shù)據(jù)值,其次它作為一個地址,它有指向固定的內(nèi)存空間;因為沒法改變他的值(0x0000FFF1),那么它指向的這塊空間位置就固定了,但這個內(nèi)存空間里放的東西可以改變。
一般格式:int* const p
關(guān)鍵點:
1.它是個常量!
2.指針?biāo)4娴牡刂房梢愿淖儯欢羔標(biāo)赶虻闹祬s不可以改變
3.指針本身是常量,指向的地址不可以變化,但是指向的地址所對應(yīng)的內(nèi)容可以變化;
注意事項:數(shù)組名也是一個指針常量,所以數(shù)組名可以作運算,但常量不能作為左值被賦值,(不能arr += 1,但可以arr++)。char str[4];str = “abc”;這種賦值方式也不行的。
int* const p1 = &a;
a = 100; //OK,可以通過原來的聲明修改值,
*p1 = 10; //OK,指針常量指向的地址不可以變,但指向的地址所對應(yīng)的內(nèi)容可以變
//p1 = &b; //Error,不可修改,即指針常量不可修改其指向的地址
三、常量指針
定義:又叫常指針,可以理解為常量的指針,也即這個是指針,但指向的是個常量,這個常量是指針的值(地址),而不是地址指向的值。
個人理解就是有一個指針變量,這個變量可以指向不同的內(nèi)存空間,但是這個內(nèi)存空間必須有個條件就是里面存在的數(shù)據(jù)是個常量不能改變,(之所以所是指針變量參見以下關(guān)鍵點)
一般格式: int const* p; const int* p;
關(guān)鍵點:
1.常量指針指向的對象不能通過這個指針來修改,可是仍然可以通過原來的聲明修改;
2.常量指針可以被賦值為變量的地址,之所以叫常量指針,是限制了通過這個指針修改變量的值;
3.指針還可以指向別處,因為指針本身只是個變量,可以指向任意地址;
const int *p1 = &a;
a = 100; //OK,仍然可以通過原來的聲明修改值,
//*p1 = 50; //Error,不可修改,即常量指針指向的地址所對應(yīng)的內(nèi)容不可變
p1 = &b; //OK,可修改,即常量指針可修改其指向的地址;
注意事項:
四、區(qū)分方式
指針變量最好區(qū)分,沒什么特點,難以區(qū)分的是指針常量和常量指針:
int const* p; //常量指針,const修飾*p,*p的內(nèi)容不可通過p改變,但p可以修改,*p不可修改
const int* p; //常量指針,const修飾*p,*p的內(nèi)容不可通過p改變,但p可以修改,*p不可修改
int* const p; //指針常量,const修飾p,p是指針,p指向的地址不能改,p不能修改,*p可修改
根據(jù)*在const前面還是在后面進(jìn)行巧記:在前是指量,改值不改向
總結(jié)
講個通俗易懂例子,假如有天你家拆遷給你分房子:
指針常量:你單身一人時分房,居委會給你分個門牌號碼(地址常量),說這是你的房子(這個常量指向的內(nèi)存空間),你只根據(jù)門牌號到幾棟幾單元幾號房,因為門牌號和房號關(guān)系是對應(yīng)好的,你改變不了,但是你單身啊,你還可以決定這房子以后的女主是誰。文章來源:http://www.zghlxwxcb.cn/news/detail-676418.html
常量指針:結(jié)婚后分房,居委會給你個門牌但沒填號碼,說這是你跟你老婆的房,告訴你現(xiàn)在人少,你和老婆可以選小區(qū)內(nèi)任意空房然后把號碼填上,且今天之內(nèi)還可修改,但你結(jié)婚了,你雖然可以任意選房,但是改不了里面住的女主了。文章來源地址http://www.zghlxwxcb.cn/news/detail-676418.html
到了這里,關(guān)于指針變量、指針常量與常量指針的區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!