首页 > 解决方案 > 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数组中的指针是否会自动转换为其值?

标签: c++

解决方案


没有区别。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;这里为什么


推荐阅读