https://www.toutiao.com/a6715637348882711053/
更多C語言答疑文章,請(qǐng)參閱:計(jì)算機(jī)編程C語言答疑文章合集
或者點(diǎn)擊下方,加入我的“C語言答疑課堂”圈子吧,第一時(shí)間看到我給大家?guī)淼腃語言試題分析!
有下面四個(gè)C程序代碼語句:
printf("array1 == array2嗎? %d\n", array1 == array2);
printf("pChar1 == pChar2嗎? %d\n", pChar1 == pChar2);
請(qǐng)問兩條C程序printf語句會(huì)輸出什么?
1、“己他”概念來解題
這道C語言指針題考察了字符數(shù)組、常量字符串、指向字符的指針等知識(shí)點(diǎn),看上去讓人“眼花繚亂”。使用我提出的C語言指針“己他”中的“己值”、“他址”概念以及“指針運(yùn)算”來解這道題是很簡單的,這些概念在我的專欄:
的第九章、第十章、第十三章有詳細(xì)的闡述,如下:
第九章:章節(jié)九、指針“己X”概念,從這里開始!(基本數(shù)據(jù)類型篇)
第十章:章節(jié)十、指針“他X”概念,精彩來了!(基本數(shù)據(jù)類型篇)
第十三章:章節(jié)十三、指針做運(yùn)算,你以為很難嗎?(應(yīng)用于數(shù)組)
2、C程序代碼
我來把這道C語言指針題擴(kuò)展成一段C程序代碼,如下:
C程序代碼
這段C程序代碼我定義了兩個(gè)字符數(shù)組array1和array2,各自保存了一個(gè)字符串"I love C",緊接著又定義了兩個(gè)指針變量pChar1、pChar2,指向兩個(gè)字符串"I love C"。運(yùn)行結(jié)果如下:
C程序運(yùn)行結(jié)果
這個(gè)結(jié)果就是上述C程序試題答案。
3、C程序代碼分析
3.1 分析1
在C程序代碼的第5行和第6行有如下語句:
char array1[] = "I love C";
char array2[] = "I love C";
兩個(gè)字符數(shù)組雖然保存的字符串看上去是一樣的,都是"I love C",其實(shí)這兩個(gè)字符串在內(nèi)存中位于不同的位置。
從運(yùn)行來看,字符數(shù)組array1的第一個(gè)元素地址是22feaf,而數(shù)組名array1的己值也是22feaf。我在專欄中提到過,數(shù)組名array1這種C代碼寫法就是第一個(gè)元素的地址,也就是說array1的己值22feaf這個(gè)數(shù)字的含義就是“他址”,他人(array1[0])的地址。
從運(yùn)行來看,字符數(shù)組array2的第一個(gè)元素地址是22fea6,而數(shù)組名array2的己值也是22fea6,也就是說array2的己值22fea6這個(gè)數(shù)字的含義就是“他址”,他人(array2[0])的地址。
C程序代碼第17行如下語句:
printf("array1 == array2嗎? %d\n", array1 == array2);
這種C程序代碼寫法就是用指針變量的己值做比較運(yùn)算。array1的己值是22feaf,array2的己值是22fea6,它們相等嗎?當(dāng)然不相等,所以輸出:0!
3.2 分析
在C程序代碼的第7行和第8行有如下語句:
char *pChar1 = "I love C";
char *pChar2 = "I love C";
兩個(gè)指針變量指向的字符串看上去是一樣的,都是"I love C",而且這兩個(gè)字符串就是同一個(gè),也就是說在內(nèi)存中位于一個(gè)位置,這就是常量字符串!
從運(yùn)行來看,指針變量pChar1的己值是404000。我在專欄中提到過,指針變量pChar1的己值就是常量字符串"I love C"的第一個(gè)字符的地址,也就是字符‘I'的地址。
從運(yùn)行來看,指針變量pChar2的己值也是404000,與指針變量pChar1的己值相等,這再次說明指針變量pChar1和pChar2指向的是同一個(gè)字符串。
C程序代碼第18行如下語句:
printf("pChar1 == pChar2嗎? %d\n", pChar1 == pChar2);
這種C程序代碼寫法就是用指針變量的己值做比較運(yùn)算。既然兩個(gè)指針變量的己值相等,所以輸出:1!
這道C語言指針試題看上去難嗎?還是在我提出的“己他”概念范圍內(nèi),所以我一直跟同學(xué)們說“C語言指針就是個(gè)紙老虎”!
聯(lián)系客服