2015-06-28 174 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]