我正在学习C++,正在理解指针,并创建了以下代码。
#include<string>
using namespace std;
int main()
{
char s[100] = "Today is a rainy day";
cout<<s[0]<<endl;
char *p;
p = s;
cout <<s<<endl;
cout<<p<<endl;
cout<<*p<<endl;
}
在这段代码中,我假设由于s指向数组的起始地址,打印指针p将给我地址,*p将给我数组的第一个元素。
我的输出是这样的
T
Today is a rainy day
Today is a rainy day
T
这里,p和s都是打印出完整的字符数组,我不明白,同样使用*p是打印出第一个元素,尽管p现在只是一个数组。
当我们在数组中使用指针时,指针的作用是怎样的,这是我想了解的。
指针和数组之间的区别只存在于编译时,在运行时,它们是一样的,都衰减为指针。
对于一个数组,在编译时你可以找到它的尺寸,并在模板代码中使用这些尺寸作为参数。参见 std::is_array
, std::extent
等。
当你取消引用数组或指针时,你最终会得到一个 char
. 这个指纹 char
,正如你所期望的那样。
然而,当你提供一个 char*
(在数组和指针的情况下都会得到这样的结果,因为数组在这里衰减为指针),重载后的 operator<<
对于 char*
被调用。
这个重载将任何 char*
它认为是一个C字串,这就是为什么你看到它被打印出来的原因。