你想象不到我有多執(zhí)著
2016-12-08 19:53:43
/*****************************************************************************************
我自己做了一個(gè)測(cè)試,但是還是有幾點(diǎn)不懂的地方,代碼在下方
測(cè)試結(jié)果:
1、int型數(shù)組如果去掉了中括號(hào)就是第一個(gè)元素的地址
2、char型數(shù)組如果去掉了后面的中括號(hào)就能夠正常格式化輸出
hello?world,如果單獨(dú)輸出第一個(gè)元素的話,就會(huì)自動(dòng)結(jié)束運(yùn)行
問(wèn):
1、如果數(shù)組去掉了后面的中括號(hào)的話就是第一個(gè)元素的地址的話,
那①處(下面代碼標(biāo)注)為什么不是輸出第一個(gè)元素的地址而是輸
出hello?world
2、如果我想要顯示第一個(gè)字符,方法如第②處那樣,點(diǎn)擊運(yùn)行之后,
跳出來(lái)的窗口就會(huì)自動(dòng)停止工作,為什么不是顯示第一個(gè)字符而
是停止工作
3、如果char型要去掉一個(gè)中括號(hào)的話,那么第③處的代碼1處應(yīng)該
是顯示hello,代碼2處應(yīng)該是顯示world,但是輸出結(jié)果卻不是我
想的那樣(代碼最后有輸出結(jié)果),為什么此處的輸出不是我想的那樣
4、問(wèn)題寫在文章最末的說(shuō)明里
*****************************************************************************************/
#include?"stdio.h"
void?main()
{
????int?a[]={1,2,3,4,5,6,7,8,9};
????char?s[]="hello?world";
????char?ss[][5]={"hello","world"};
????//輸出a
????printf("%d\n",a);
????//輸出a的地址
????printf("%d\n",&a);
????//輸出a的第一個(gè)元素的地址
????printf("%d\n",&a[0]);
????//①格式化輸出字符
????printf("%s\n",s);
????//②錯(cuò)誤代碼
????//printf("%s\n",s[0]);????????????????????//程序停止工作,但代碼編譯未報(bào)錯(cuò)
????//③驗(yàn)證猜想
????//代碼1
????printf("%s\n",ss[0]);
????//代碼2
????printf("%s",ss[1]);
}
/*********輸出結(jié)果*****************
1703708
1703708
1703708
hello?world
helloworldm
worldm
*********************************/
/**************說(shuō)明***************
輸出結(jié)果最后兩行最后的m是隨機(jī)亂碼,有
時(shí)候會(huì)是y,有時(shí)候會(huì)是x,有時(shí)候會(huì)是空白
為什么會(huì)出現(xiàn)亂碼
********************************/?
2 回答
已采納

克洛
TA貢獻(xiàn)6條經(jīng)驗(yàn) 獲得超2個(gè)贊
由于你在printf里面給的格式是%s,意思是以字符串輸出,你給該字符串的首地址,所以輸出的是hello world,如果想輸出s的地址把%s改成%d就可以了,%d的意思是以整型輸出
你指定了要用字符串的方式輸出,但是后面給的不是一個(gè)地址,所以出錯(cuò)了,如果你想要顯示第一個(gè)字符,用%c指定輸出格式是字符,就是把代碼里的%s換成%c就可以了
4.你那個(gè)ss賦值的時(shí)候是直接用字符串賦值,但是你的數(shù)組長(zhǎng)度是5,所以最后沒辦法自動(dòng)添上/0作為結(jié)束符,printf輸出字符串的需要遇到/0才能結(jié)束,你的字符串后面沒有/0,所以會(huì)一直輸出直到遇到/0,這是后面亂碼的原因.可以把ss每行定義為6個(gè)元素,大小夠用了,后面就不會(huì)出現(xiàn)亂碼了
- 2 回答
- 1 關(guān)注
- 4076 瀏覽
添加回答
舉報(bào)
0/150
提交
取消