每日一題 | C語言指針練習(xí) 一

看題:分析下列C語言代碼,解釋出現(xiàn)結(jié)果的原因!

#include<stdio.h>

int main()

{

char?a[20] = { "You_are_a_girl" };

printf("%s\n", a);

int* ptr = (int*)a;

ptr += 2;

*ptr = 'abcd';

for?(int?i = 0; i < 20; i++)

{

printf("%c", a[i]);

}

getchar();

}

這是運(yùn)行結(jié)果

結(jié)果

解析:

1、int* ptr = (int*)a;這條語句的作用是,把a(bǔ)強(qiáng)轉(zhuǎn)為int型指針,并賦值給ptr。

2、ptr += 2;這條語句的作用是,使ptr指針走兩步,而ptr是int型指針,所以步長(zhǎng)是4字節(jié),走兩步就是8字節(jié)。每個(gè)字母一個(gè)字節(jié),意思就是走過了八個(gè)字符,ptr現(xiàn)在指向了第二個(gè)a字母。You_are_a_girl

3、*ptr = 'abcd';這句話是最難理解的吧,應(yīng)該。*ptr是整數(shù),整數(shù)是四個(gè)字節(jié),看后面的值abcd正好四個(gè),每個(gè)占一個(gè)字節(jié)(大家看看ascii表,看下對(duì)應(yīng)的二進(jìn)制)01100001 01100010 01100011 01100100這就是理論的內(nèi)存存儲(chǔ)的二進(jìn)制數(shù),八個(gè)位(一個(gè)字節(jié))存一個(gè)字母,分別是a,b,c,d

4、經(jīng)過上面的分析,對(duì)于輸出基本沒什么問題,最大的問題就是為什么abcd會(huì)是逆序輸出的。這是因?yàn)閷?duì)于跨越多個(gè)字節(jié)的數(shù)據(jù)類型(比如 int 長(zhǎng) 4 個(gè)字節(jié)),如何在內(nèi)存中對(duì)這些字節(jié)進(jìn)行排序有兩種常見的方法:大端法(Big-endian)和小端法(Little-endian)。具體的就不在這里解釋了,想了解的自行科普

更多學(xué)習(xí)資料,學(xué)習(xí)題目可以加群479478422,還有群主免費(fèi)解答哦

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容