33 通過指針引用字符串

點(diǎn)擊藍(lán)字
關(guān)注我們
DRAGON BOAT FESTIVAL
01 字符串的引用形式
在C程序中,字符串是存放在字符數(shù)組中的。
用字符數(shù)組存放一個(gè)字符串,可以通過數(shù)組名和下標(biāo)引用字符串中的一個(gè)字符,也可以通過數(shù)組名和格式聲明%s輸出該字符串。
用字符指針變量指向一個(gè)字符串常量,通過字符指針變量引用字符串常量。
通過字符數(shù)組名或字符指針變量可以輸出一個(gè)字符串,而對(duì)一個(gè)數(shù)值型數(shù)組,是不能企圖用數(shù)組名輸出它的全部元素的。
02 字符指針作函數(shù)參數(shù)
如果想把一個(gè)字符串從一個(gè)函數(shù)“傳遞”到另一函數(shù),可以用地址傳遞的方法,即用字符數(shù)組名作參數(shù),也可以用字符指針變量作參數(shù)。
在被調(diào)用的函數(shù)中可以改變字符串的內(nèi)容,在主調(diào)函數(shù)中可以引用改變后的字符串。
字符串字面值常量作為右值時(shí),就是這個(gè)字符串對(duì)應(yīng)的字符數(shù)組的名稱,也就是這個(gè)字符串在內(nèi)存中的地址。
char* msg = "Hello world";int main(void){int num = 97;int *p1 = #char* p2 = (char*)(&num);printf("%d",*p1); //輸出 97putchar(*p2); //輸出 areturn 0;}
指針的值:很好理解,如上面的num 變量 ,其地址的值就是0028FF40 ,因此 p1的值就是0028FF40。數(shù)據(jù)的地址用于在內(nèi)存中定位和標(biāo)識(shí)這個(gè)數(shù)據(jù),因?yàn)槿魏?個(gè)內(nèi)存不重疊的不同數(shù)據(jù)的地址都是不同的。
指針的類型:指針的類型決定了這個(gè)指針指向的內(nèi)存的字節(jié)數(shù)并如何解釋這些字節(jié)信息。一般指針變量的類型要和它指向的數(shù)據(jù)的類型匹配。
由于num的地址是0028FF40,因此p1 和 p2的值都是0028FF40
*p1 : 將從地址0028FF40 開始解析,因?yàn)閜1是int類型指針,int占4字節(jié),因此向后連續(xù)取4個(gè)字節(jié),并將這4個(gè)字節(jié)的二進(jìn)制數(shù)據(jù)解析為一個(gè)整數(shù) 97。
*p2 : 將從地址0028FF40 開始解析,因?yàn)閜2是char類型指針,char占1字節(jié),因此向后連續(xù)取1個(gè)字節(jié),并將這1個(gè)字節(jié)的二進(jìn)制數(shù)據(jù)解析為一個(gè)字符,即'a'。
同樣的地址,因?yàn)橹羔樀念愋筒煌瑢?duì)它指向的內(nèi)存的解釋就不同,得到的就是不同的數(shù)據(jù)。
03 使用字符指針變量和字符數(shù)組的比較
字符數(shù)組由若干個(gè)元素組成,每個(gè)元素中放一個(gè)字符,而字符指針變量中存放的是地址(字符串第1個(gè)字符的地址),絕不是將字符串放到字符指針變量中。
賦值方式。可以對(duì)字符指針變量賦值,但是不能對(duì)數(shù)組名賦值。
初始化的含義。對(duì)字符指針變量賦初值。
存儲(chǔ)單元的內(nèi)容。編譯時(shí)為字符數(shù)組分配若干個(gè)存儲(chǔ)單元,以存放各元素的值,而對(duì)字符指針變量,只分配一個(gè)存儲(chǔ)單元(Visual C++為指針變量分配4個(gè)字節(jié))。
指針變量的值是可以改變的,而數(shù)組名代表一個(gè)固定的值(數(shù)組首元素地址),不能改變。
字符數(shù)組中各元素的值是可以改變的,但字符指針變量指向的字符串常量中的內(nèi)容時(shí)不可以被取代的。
引用數(shù)組元素。對(duì)字符數(shù)組可以用下標(biāo)法引用一個(gè)數(shù)組元素,也可以用地址法。
用指針變量指向一個(gè)格式字符串,可以用它代替printf函數(shù)中的格式字符串。

球分享

球點(diǎn)贊

球在看
