1. printf("%s\n", &name2[1]); 是表示输出char name2[ ] = {'o', 'k'};中地址为1的字符串, 把它当作是字符串输出的,直到遇到\0结束。从'k'开始输出。
2. 而你说的,“&不是代表地址吗?输出地址占位符不是应该是%p吗?”
你是想说为什么不把%s换成%p,
因为printf("%p\n", &name2[1]);是表示输出name2[1]的地址值。而不是输出字符串。两者表达的意思不一样。
3.上面的printf("%s\n", name2);这里可以直接写成数组名name2,因为数组名代表数组地址,它和name2[1]表示的含义不一样,name2[1]表示name2中地址为1的元素。
4. 若要直接写成printf("%s\n", name2[1]);就会报错,意思是输出char name2[] = {'o', 'k'};中第地址为1的'k'字符,而不是输出字符串,%s表示输出字符串。所以不能直接用name2[1]。
这是我的理解,就是说的太啰嗦了,只希望楼主能看明白。 |