带有字符数组变量的指针

问题描述 投票:0回答:1

我正在学习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现在只是一个数组。

当我们在数组中使用指针时,指针的作用是怎样的,这是我想了解的。

c++ arrays pointers
1个回答
0
投票

指针和数组之间的区别只存在于编译时,在运行时,它们是一样的,都衰减为指针。

对于一个数组,在编译时你可以找到它的尺寸,并在模板代码中使用这些尺寸作为参数。参见 std::is_array, std::extent等。


0
投票

当你取消引用数组或指针时,你最终会得到一个 char. 这个指纹 char,正如你所期望的那样。

然而,当你提供一个 char* (在数组和指针的情况下都会得到这样的结果,因为数组在这里衰减为指针),重载后的 operator<< 对于 char* 被调用。

这个重载将任何 char* 它认为是一个C字串,这就是为什么你看到它被打印出来的原因。

© www.soinside.com 2019 - 2024. All rights reserved.