很想知道这两个输出的区别是什么,为什么我用指针输出的时候就不能 而用数组名的时候就可以转换的?
而且把中间while循环去掉之后 用指针输出也是可以的,实在不懂
第一个代码,因为是%s的形式,而p是地址,所以输出不了,str是数组名,输出的1是整个大写字母,那第三个是为什么啊?
这里的关键问题在于指针和数组名在使用上有所不同。
首先,对于指针char* str = "123456",指针本身存储的是字符串的地址,也就是指向该字符串的第一个字符'1'的地址。因此,使用cout << str会输出该地址,而不是字符串本身。如果需要输出该字符串,可以使用cout << *str或者使用指针递增操作符++依次输出每个字符,例如:
char* str = "123456";
while (*str) {
cout << *str;
str++;
}
接着,对于数组名char str[] = "123456",数组名本身就代表了整个字符串,所以使用cout << str会输出该字符串本身。
在你的代码中,当你使用指针输出时,实际上是输出了指针本身的地址。而当你使用数组名输出时,就直接输出了字符串本身。
当你去掉中间的while循环时,使用指针输出是可以的,这是因为此时指针递增后指向了字符串的结尾'\0',cout << str会自动停止输出。而在有中间循环的情况下,指针递增后仍然指向字符串的结尾,但是在下一次循环中仍然会执行cout << str,此时就会输出一个随机值,因为此时指针已经越界了。
最后,如果你想要输出指针所指向的字符串,可以使用cout << str + i输出,其中i是指针递增的次数,即要输出字符串的起始位置。