想要了解指針的概念,首先要了解變量在內(nèi)存中是如何存儲(chǔ)的。
創(chuàng)新互聯(lián)是一家專(zhuān)注于網(wǎng)站設(shè)計(jì)、網(wǎng)站制作與策劃設(shè)計(jì),西峽網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:西峽等地區(qū)。西峽做網(wǎng)站價(jià)格咨詢(xún):18980820575int a=3; //這行代碼的意思是,首先在計(jì)算機(jī)的隨機(jī)區(qū)域開(kāi)辟一個(gè)地址,連續(xù)四個(gè)字節(jié)的空間,把整數(shù)3存放在這個(gè)連續(xù)的空間上
a代表了這個(gè)空間的首地址,但a自身不是地址類(lèi)型。
變量在存儲(chǔ)時(shí),內(nèi)存被分為一塊一塊的。每一塊都有一個(gè)特有的編號(hào)。而這個(gè)編號(hào)可以暫時(shí)理解為指針,就像樓房每層的房間都有自己的門(mén)牌號(hào)一樣。
? 總的來(lái)說(shuō),指針就是地址。但是我們平時(shí)說(shuō)的指針其實(shí)指的是指針變量。指針變量就是一個(gè)存放地址的變量。
指針的類(lèi)型在我們定義一個(gè)變量的時(shí)候,要確定它的類(lèi)型。就像 int i、char c、float f 一樣,在定義指針變量時(shí)也是一樣的,必須確定指針類(lèi)型。
int 型的指針需要用 int 類(lèi)型的指針存儲(chǔ),char 型的指針需要用 char 類(lèi)型的指針存儲(chǔ)。
* 和 &int *p; //定義了一個(gè)整型的指針變量
char *q; //定義了一個(gè)字符型的指針變量
學(xué)習(xí)指針的時(shí)候,我們會(huì)很頻繁的看見(jiàn)?* 和 &?這兩個(gè)符號(hào),根據(jù)我們對(duì)c語(yǔ)言運(yùn)算符號(hào)的了解,知道 * 是乘法運(yùn)算符,& 是按位與運(yùn)算符,但是這兩個(gè)符號(hào)與指針一結(jié)合它們各自所代表的含義就會(huì)發(fā)生變化,
& : 在運(yùn)算時(shí)是表示按位與運(yùn)算,但是在指針相關(guān)的語(yǔ)句中使用是取直接地址的意思,取直接地址就是取數(shù)據(jù)存放的首地址。例:int i=3;? &i 的含義是取變量 i 的地址。
*?: 有三層含義,在運(yùn)算時(shí)表示乘法,在與指針相關(guān)的語(yǔ)句中使用時(shí)會(huì)有兩種用法,一種用法是定義時(shí),表示的是數(shù)據(jù)類(lèi)型——地址類(lèi)型,另一種是在使用時(shí),表示的是取間接地址:就是取地址中的數(shù)據(jù)。例:int *p;int i=3;? p?= &i;? p 為 i 的地址,*p?則為通過(guò) i 的地址,獲取 i 中存放的內(nèi)容。
代碼示例:
int a=3; //定義了一個(gè) 普通變量 a
int *p; //定義了一個(gè)指針變量
p = &a; //通過(guò)取地址符 &,獲取 a 的地址,把地址賦值給指針變量
printf("%d\n", *p); //通過(guò) 間接尋址符 *,獲取指針指向的內(nèi)容
指針的定義指針變量的定義格式為:數(shù)據(jù)類(lèi)型 *指針名;
例如:下面分別定義了 int、float、char 類(lèi)型的指針變量。
int *p;
float *q;
char *c;
如上面的定義,指針變量名為 p、q、c。并不是 *q、*q、*c。
代碼示例:
void point(void)
{
int* p;
????int a[3] = { 1,2,3 };
????p = a; //指針指向數(shù)組 等價(jià)于 p=&a[0],因?yàn)閿?shù)組名稱(chēng)代表了數(shù)組首個(gè)元素的地址,地址是一種數(shù)據(jù)類(lèi)型用 * 表示。
????p++; // p++ 表示指針指向下一個(gè)元素。
????char c[3] = { 'a','e','s' };
????//p=c; //這樣是錯(cuò)誤的,p 指向的是整型數(shù)據(jù),c 是字符型數(shù)組,此時(shí)執(zhí)行 p++,將指向字符型數(shù)組的第四個(gè)元素。
????char* f;
????f = c; //定義一個(gè)字符型指針,指向字符型數(shù)組。
????(char*)p = c; //數(shù)據(jù)類(lèi)型的強(qiáng)制轉(zhuǎn)換。 p 本來(lái)是整型指針,(char*) 把 p 強(qiáng)制轉(zhuǎn)換成字符型指針,就可以指向字符型數(shù)據(jù)了。
}
指針的輸入代碼示例:
void point1(void)
{
int* p;
????int a;
a = 3;
????p = &a;
scanf_s("%d", p); //等價(jià)于 scanf("%d", &(*p)); 這里的 * 是取間接地址,取的是 p 中存放的數(shù)據(jù),& 是取數(shù)據(jù)的地址。
}
指針的輸出代碼示例:
void point2(void)
{
int a;
int* p;
a = 3;
p = &a;
printf("%d", *p);// * 是取間接地址,printf 輸出的是 p 里的數(shù)據(jù)。
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧