c++ 字符串指针 老有关问题

c++ 字符串指针 老问题
char a[]="helloworld";
printf("this is %s\n", a);
printf("this is %s\n, a[0]);
printf("this is %s\n, a[1]);

打印出来的结果第一个应该为helloworld,但是第二个和第三个就是segment fault。
理论上来说a指向字符串的首地址,然后打印出%s是指从该地址开始的字符串。
那么a[0]应该是首字符的地址,为什么打印出的不是从首个字符开始的字符串?
那么a[1]应该是第二个字符的地址,为什么打印出的不是从第二个字符开始的字符串?
求教!

------解决方案--------------------
a[0]和a[1]不是地址这两个元素的地址是a和a+1
------解决方案--------------------
C/C++ code

char a[]="helloworld"; //定义了一个数组a
//数组的名字a代表数组的首地址,
printf("this is %s\n", a);//输出整个字符串没有问题
//a[0]不是表示字符串首字符的地址,而是表示首字符。首字符地址是a,也即&a[0]
printf("this is %s\n, a[0]);
//同理,第一个元素的地址是a+1 或者 &a[1]
printf("this is %s\n, a[1]);

------解决方案--------------------
a[0]和a[1]不是地址这两个元素的地址是a和a+1
你想打印的话 应该是这样的:
printf("this is %s\n", a);
printf("this is %s\n, &a[0]);
printf("this is %s\n, &a[1]);


------解决方案--------------------
char a[]="helloworld";
printf("this is %s\n", a);
printf("this is %s\n, a[0]);
printf("this is %s\n, a[1]);

===================
a[0],a[1]是字符
要么
char a[]="helloworld";
printf("this is %s\n", a);
printf("this is %s\n, &a[0]);
printf("this is %s\n, &a[1]);//输出字符串
要么
char a[]="helloworld";
printf("this is %s\n", a);
printf("this is %c\n, a[0]);
printf("this is %c\n, a[1]);//输出字符