c++ - char 数组及其指针如何在 C++ 中准确工作?
问题描述
我是 C++ 的初学者,在使用字符数组时我无法理解一件事:所以,我知道指针本质上是“指向”另一个变量的内存地址的变量,并且数组的名称(例如: int a[20]) 是指向该数组中值的常量指针。当使用不同的数字类型(int、float 等)时,如果我们通过消息输出该数组的名称,它会显示第一个元素的地址,但如果我们对 char 类型执行相同操作,它不会显示地址,而是变量的值。例子:
#include <iostream>
using namespace std;
int main()
{int a[]={1,2,3,4,5};
cout<<a<<endl; //through output, it shows the memory address of the first
element of the array;
char b[]={"Mountain"};
cout<<b; //It outputs the word "Mountain"
return 0;
}
输出时,char数组中的指针是否会自动转换为其值?
解决方案
没有区别。char
指针与指针并没有神奇的不同int
。那么发生了什么事呢?
std::cout <<
(或更旧的printf()
)有char*
. 这意味着如果输入是 a ,则函数的行为会有所不同char*
:迭代指针直到'\0'
到达字符(请参阅以空终止的字符串)。
char b[]={"Mountain"};
b
不包含_
{'M', 'o', 'u', 'n', 't', 'a', 'i', 'n'}
但反而
{'M', 'o', 'u', 'n', 't', 'a', 'i', 'n', '\0'}
<-'\0'
使迭代和停止成为可能。
这也解释了为什么数组大小b
大于1
单词内的字符数。
要添加,您不应该使用这些 char 指针。它们很危险,并且长期以来被现代实用程序所取代,例如std::string
.
现在 int a[]={1,2,3,4,5};
还可以,但std::array<int, 5> a = {1,2,3,4,5};
更好。
- 类型是唯一的 (
std::array<int, 4> != std::array<int, 5>
) - 它有一个
.size()
功能。 - 因此,您可以将其传递给其他函数,而无需添加 size 参数
- 它和普通数组一样快
std::array
可以通过包含来使用<array>
。
如果你曾经追求过类似的东西int* a = new int[5];
,而不是停在那里,而是使用std::vector
最后永远不会说use namespace std;
(这里为什么)
推荐阅读
- php - 登录 cookie 问题后的 PHP 7.2 MySQL Google App Engine
- python - 我的电脑有一个 python 2.7 控制台,我想把它转换成 python 3?我怎样才能在没有(或更少)删除的情况下做到这一点?
- css - 哪些 CSS 伪类没有特异性?
- haskell - 如何使用 Servant 验证/报告无效输入的错误?
- javascript - 时刻,格式化日期数组并获得无效结果
- java - 转义双引号无法正常工作 Jdom2
- reactjs - Gatsby 预取请求 /page-data//page-data.json 给出 404
- javascript - addEventListener 在控制台中工作但在 JS 中不工作
- c# - 针对同一套接字的两个流的 SslStream.AuthenticateAsClient 失败
- c# - 登录 .net core wpf 应用程序