爲什麼字符型數組可以整體輸出,而整形數組不可以

 

我的觀點其實是輸出函數的問題,以下是轉載的兩篇博文

1、

java小記:
先來看看 這個例子:
class ArrayNum{
public static void main(String[] args){
char[] num2 = {'r','w','f'};
int[] num3 = {1,3,4};
String a = "handsome girl";
System.out.println(num2);
System.out.println(num3);
System.out.println(a);
}
}
運行後可以得到如下圖結果:
爲什麼字符型數組可以整體輸出,而整形數組不可以

結果表明我們可以直接整體輸出字符型數組和字符串,而無法整體輸出整形數組(只能輸出其地址)
爲什麼會這樣呢?
先從字符串講起。String是java中的一個類,所以一定會重載toString()函數,故toString()會返回其本身。所以直接打印String類的對象會輸出具體字符串(就像其他所有類一樣)。而字符型數組在內存中的儲存方式同String類一樣,故輸出數組名並不是輸出數組首地址,而是直接輸出數組內容直到/0;而整形數組只是整形的集合,所以其數組名僅僅是其首地址,我們必須要用for循環才能完整的輸出整個整形數組

 

2、

char *p;int  *p1;

int  a[10]={1,2,3,4,5,6,7,8,9,0};
char str[]="mengfan";
p=str;
p1=a;

printf( "%x" , p);   /*輸出的是地址*/
printf("%s",p);   /*輸出的是字符串mengfan*/

printf("%x",p1);輸出的是地址

printf("%s",p1);    /*輸出的是字符串,亂碼*/

p,p1中存放的應爲字符串,但在輸出時還要兼顧前面的輸出格式符的控制,如果

是%s,則會在p的地址內的數據輸出,而不再輸出p本身的內容地址

printf("%c",p);//會輸出字符串的第一個字母m

printf("%d",p1);//會輸出數組的第一個數字

所以 p,p1離存的都是地址,在用%c,%d時都能作爲首地址輸出第一個字母或數組元素,

但是如果換用,%s,輸出字符串,在一個地址空間內是不能存在字符串的,所以編譯器

會認爲是連續空間內的字符串,所以就輸出了字符串。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章