2015-06-28 170 views
-4
#include <stdio.h> 

int main(){ 
    char arr[] = "HelloWorld"; 

    printf("%s\n", arr+3); //first line 
    printf("%s\n", &arr[4]); //second line 
    return 0; 
} 

任何人都可以向我解釋以下內容嗎?打印數組字符串的方法

1)爲什麼第一行輸出= loWorld?

2)爲什麼第二行的輸出= oWorld?

3)爲什麼需要把&放在第二行?

+5

你知道指針算法和數組指針轉換? – haccks

+2

這在第一章的所有C書中都有介紹 - 爲什麼不讀它? –

+3

是的,這是簡單的指針算術。閱讀指針和數組如何工作。 – Raman

回答

6

你的陣列是建立像

--------------------------------------------- 
| H | e | l | l | o | W | o | r | l | d |\0 | 
--------------------------------------------- 
    | |  | | 
arr arr+1 arr+3 &arr[4] 

所以%s打印字符串直到遇到\0字符。您正在從arr+3打印到字符串的結尾。

注意arr+1相同&arr[1]arr+2相同&arr[2]

&arr[4]將給第五元素的地址字符串中(用於指針它是arr+4)和%s打印字符串從那裏直到字符串結束。

0

&意味着要讓variable.So的地址,arr是一樣&arr&arr[0]

arr+3等於&arr[3]arr[3]