字母c语言定义为什么变量,C语言为什么要规定对所用到的变量要“先定义,后使用”...
該樓層疑似違規(guī)已被系統(tǒng)折疊?隱藏此樓查看此樓
int a=10;
以上一句話對(duì)變量a進(jìn)行了聲明,定義以及初始化
extern int a;
以上一句話僅僅對(duì)變量a進(jìn)行了聲明,將a的鏈接屬性設(shè)置為external
int *p;
以上定義了一個(gè)指針
int a=10;
int *p;
p=&a;
以上為指針變量進(jìn)行了賦值
說(shuō)明:
首先*操作符被稱為“間接訪問(wèn)操作符”也叫“解引用操作符”,他的作用很簡(jiǎn)單,就是對(duì)它的右操作數(shù)進(jìn)行解引用,這么說(shuō)吧,間接訪問(wèn)操作符的右操作數(shù)是一個(gè)地址,不過(guò)這里的地址只是相當(dāng)于一個(gè)字符串,并沒(méi)有真正的在計(jì)算機(jī)內(nèi)存中標(biāo)識(shí)一個(gè)位置,只有對(duì)這個(gè)操作數(shù)進(jìn)行解引用,才能真正定位到計(jì)算機(jī)的內(nèi)存中相應(yīng)的地址上;接下來(lái)是&操作符,這個(gè)被稱作“取地址操作符”,首先要明確,指針變量中存儲(chǔ)的不是一個(gè)具體的數(shù)值,他存儲(chǔ)的是一個(gè)地址“字符串”,p=&a,是將a的地址放入到p這個(gè)指針變量中,補(bǔ)充一句,在C語(yǔ)言中指針變量一般占有4個(gè)字節(jié)的內(nèi)存
int *p=12;
以上表達(dá)式是錯(cuò)誤的,千萬(wàn)不要在實(shí)際編程中進(jìn)行使用,可能有些編譯器不會(huì)報(bào)錯(cuò),但不代表所有編譯器不報(bào)錯(cuò),但即使不報(bào)錯(cuò)也不要這么使用
說(shuō)明:
首先該表達(dá)式給絕大多數(shù)初學(xué)者的印象是給指針p所指向的內(nèi)存位置賦上值12,但是我們要注意了這里僅僅是對(duì)指針變量進(jìn)行了聲明以及定義,也就是說(shuō)編譯器僅僅在內(nèi)存中替指針變量p分配了4個(gè)字節(jié)的內(nèi)存,而并沒(méi)有位指針變量p所指向的位置分配內(nèi)存,也就是說(shuō)int *p=12這個(gè)表達(dá)式的意義是未明確的,因?yàn)?2這個(gè)值得具體存放位置編譯器并不知道,筆者檢測(cè)過(guò),在MinGW(gcc在windows下的移植工具集)中,這樣寫僅僅是報(bào)“警告”,但這樣寫是錯(cuò)誤的,所以絕對(duì)不要這么寫
int a=12;
int (int *)1000=&a;
以上是為常量指針進(jìn)行初始化,但是在C編程中我們可以說(shuō)是絕無(wú)可能遇到這種情況,因?yàn)镃語(yǔ)言中內(nèi)存的分配并不是固定的
int a=100;
int *p=&a;
*++p;
看到以上表達(dá)式很多初學(xué)者就要困惑了,因?yàn)榍熬Y自增操作符的優(yōu)先級(jí)要高于間接訪問(wèn)操作符的優(yōu)先級(jí),那對(duì)于*++p;這個(gè)表達(dá)式而言是不是就應(yīng)該后執(zhí)行間接訪問(wèn)操作符呢?這里筆者糾正一下,如果是兩個(gè)操作符同時(shí)具有相應(yīng)的操作數(shù),那么就遵循操作符的優(yōu)先級(jí)來(lái)進(jìn)行運(yùn)算,但是這里的*++p;這樣的表達(dá)式,我們看到只有一個(gè)操作數(shù),而間接訪問(wèn)操作符和前綴自增操作符都是自右右左的結(jié)合性,所以這里先執(zhí)行自增操作,也就是將指針變量p所存儲(chǔ)的地址加1,之后再進(jìn)行解引用,定位到具體的內(nèi)存中,這里假設(shè)自增前p的地址是201,那么自增后再解引用,就會(huì)定位到202這個(gè)內(nèi)存上
int a=100;
int *p=&a;
*p++;
看了上面的解說(shuō)后,一般的初學(xué)者看了*p++;這樣的表達(dá)式,大概會(huì)興奮的說(shuō),這里必然是后綴自增先執(zhí)行,哈哈哈,筆者在這里要大笑三聲然后自罰三杯,因?yàn)楣P者以上并沒(méi)有說(shuō)清自增的特性,現(xiàn)在這里說(shuō)說(shuō)后綴自增吧,在*p++;中后綴自增操作符會(huì)優(yōu)先產(chǎn)生p的一個(gè)副本,然后解引用操作符會(huì)作用到這個(gè)副本上并返回值,這之后自增運(yùn)算符才會(huì)在原有的p上執(zhí)行加1的操作;我們?cè)賮?lái)說(shuō)一說(shuō)*++p;這個(gè)表達(dá)式,首先前綴自增會(huì)優(yōu)先在p上執(zhí)行加1的操作,然后產(chǎn)生一個(gè)p的副本,最后解引用操作符會(huì)對(duì)增1過(guò)后的副本進(jìn)行解引用,從而得到相應(yīng)位置的值
總結(jié)
以上是生活随笔為你收集整理的字母c语言定义为什么变量,C语言为什么要规定对所用到的变量要“先定义,后使用”...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java ftp详解_Java实现FTP
- 下一篇: CPU寻址范围(寻址空间)一系列问题