为什么“char **”类型的索引给出整个字符串?

2024-04-08

考虑这个片段:

#include <iostream>

using std::cout;
using std::endl;

int main()
{
    char c[] = {'a','b','c','\0'};
    char *pc = c;
    char **ppc = &pc;
    cout << ppc[0] << endl;
}

这打印abc作为输出。为什么指向指针的指针的索引char返回整个字符串?这里,ppc只指向另一个指向单个指针的指针char。它如何知道整个字符串以及为什么要返回它?


你必须明白什么std::cout是以及为什么它治疗char*作为“字符串”。

开始吧:

std::cout是一个实例std::ostream and std::ostream有很多运营商。这是什么意思?

实施std::ostream可以,但这里仅作为示例,写法如下:

 class ostream
 {
     // ... a lot more code for constructors and others
     ostream& operator <<( const int );
     ostream& operator <<( const double );
     ostream& operator <<( char* );        <<< this is the implementation you search for!
     // a long list of more special overloads follow
 };

实现只是简单地输出 char* 指向的“字符串”。

你所看到的只是一个特殊的重载operator<<为了std::ostream class.

好的,真正的实现使用非成员重载,但这对于理解如何实现并不重要std::ostream原则上工作。

欲了解更多详情,请参阅:std::ostream::operator https://en.cppreference.com/w/cpp/io/basic_ostream/operator_ltlt

字符和字符串参数(例如 char 或 const char* 类型)由运算符

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么“char **”类型的索引给出整个字符串? 的相关文章

  • [现代] C++ 中 N 个变量的范围/循环

    遍历 N 个任意类型的变量来执行操作的简洁方法是什么 假设我有变量a b c d e并想要对他们所有人进行一些操作 使用 Boost Hana 和通用 lambda include
  • weak_ptr、make_shared 和内存释放

    一个控制块shared ptr当至少有一个时保持存活weak ptr展示 如果共享指针是用以下命令创建的make shared这意味着对象的整个内存都保持分配状态 对象本身被正确破坏 但由于对象的控制块和内存被分配在一个块中 如make s
  • C++:初始化结构体并设置函数指针

    我正在尝试使用函数指针初始化结构 但是除非使用全局函数完成 否则我很难这样做 以下代码有效 float tester float v return 2 0f v struct MyClass Example typedef float My
  • 确定 .NET 类型的序列化大小和非托管内存效率

    我的问题是是否可以确定引用类型的序列化大小 以字节为单位 情况如下 我使用 BinaryFormatter 类来序列化基本 NET 类型 例如 Serializable public class Foo public string Foo1
  • 如何知道类枚举的基础类型?

    我有一个变量声明为 enum class FooEnum uint64 t 我想转换为它的基本类型 但我不想对基本类型进行硬编码 例如 这样的事情 FooEnum myEnum uint64 t intPointer underlying
  • 哪个 C++ 草案?

    我对当前的 C 标准感兴趣 并且对以下链接有点困惑http www open std org jtc1 sc22 wg21 docs papers 2014 http www open std org jtc1 sc22 wg21 docs
  • 初始化顺序是否有保证

    我正在使用类似以下代码段的内容来进行一些初始化 我知道初始化p
  • C 在函数中返回数组

    我对 C 比较陌生 我习惯用 Java 编程 所以我发现 C 在涉及数组的方面有点困难 我仍然对这些案例感到困惑 int a int a int a 在java中 我会做这样的事情来在函数中返回一个数组 int returnArr int
  • 在 C++11 中使用 max 作为谓词会中断

    在 C 03 中 以下代码工作正常 int main std vector
  • 如何存储将被多个不同类访问的字符串常量? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 关于堆栈溢出有太多不同的答案 声明一个命名空间 并在 hpp 文件中将所有字符串标记为 extern const 并在 cpp 文件中放置它们的
  • 在C中更改函数内的数组

    我正在学习 C 并且很困惑为什么在 main 中创建的数组不会在函数内部更改 我假设传递的数组是一个指针 并且更改指针应该更改数组 对吧 有人可以解释这种情况下发生了什么吗 谢谢你的帮助 int main int i length 10 i
  • 是否有可能在 C++ 中获取 std::array 的子数组?

    我想做类似的事情 std array
  • 在C++中初始化静态指针

    我有一个带有静态成员的类 它是一个指针 如下所示 动画 h class Animation public Animation static QString m 动画 cpp include animation h QString Anima
  • 在 C# 中通过 C DLL 使用数组和指针

    我对 C 非常陌生 上周才开始学习 我有一个用 C 编写的自定义 DLL 具有以下函数 DLLIMPORT void test function double test 我想要做的是从 C 获取数组 test 的指针 因此 如果在 DLL
  • 指向字节数组的指针

    由于 Misra C 的要求 我的一位同事想要使用指针声明 但我遇到了一些问题 Misra 安全关键指南 不会让我们纯粹的程序员使用指针 但会让我们对数组字节进行操作 他打算获取一个指向字节数组的指针 因此我们不会在堆栈上传递实际的数组 T
  • C++ 模板 typedef

    我有课 template
  • 为什么 std::atomic 比 volatile bool 慢很多?

    多年来我一直使用 volatile bool 来控制线程执行 并且效果很好 in my class declaration volatile bool stop In the thread function while stop do th
  • 在 boost 元组、zip_iterator 等上使用 std::get 和 std::tie

    我有哪些使用选择std get lt gt and std tie lt gt 与增强结构一起 例子 我想使用基于范围的 for 循环在多个容器上进行迭代 我可以实施zip函数 它使用boost zip iterator include
  • Windows 上的 wchar_t 和 char16_t 是一样的吗?

    我有一个实例std u16string 我可以通过它吗c str 到一个 Win32 API 它期望LPCWSTR 没有任何类型的转换 例如 我可以安全地这样做吗 auto u16s std u16string u Hello SetWin
  • static_cast 和对指针的引用

    谁能告诉我为什么这不能编译 struct A struct B public A int main B b A a b B b1 static cast

随机推荐

  • 单击链接后,javascript何时停止在页面上运行?

    我有一个运行各种 javascript 代码的页面 包括调用setTimeout 如果用户单击链接导航到另一个页面 该页面上的 javascript 在什么时候停止运行 因此我的 setTimeout 调用的代码将不再被调用 例如 单击链接
  • 我如何使用 Android EffectFactory 类?

    我厌倦了开发带有图像处理的示例应用程序 在我的应用程序中我需要添加一些color effects Grayscale sepia 在我的位图上 我参考了开发人员文档Doc 1 http developer android com refer
  • react-native\react.gradle' 不存在

    我使用 React Native 创建了一个应用程序 并且正在尝试生成 apk 完成文档中的所有操作后http facebook github io react native docs signed apk android html con
  • 雅罗斯拉夫斯基的双主元快速排序算法

    我正在研究我发现的双枢轴快速排序here http aofa2013 lsi upc edu slides Nebel pdf 幻灯片第 20 页 比较 雅罗斯拉夫斯基平均需求 1 9 n ln n 经典快速排序需要 2 n ln n 比较
  • 多个 jQuery-UI 滑块的合计

    我正在尝试实现一个有 4 个 jQuery UI 滑块的页面 并且我想让所有 4 个滑块的总数永远不会超过 400 我不介意以哪种方式实现这一点 它可以从 0 开始 一旦您更改 1 个滑块 剩余的可用总数就会减少 或者将滑块设置为超过最大值
  • Dart 扩展了 Map 以便于延迟加载

    我正在尝试将数据从服务器延迟加载到地图中 出于这个原因 我想向 Map 添加功能 以便当键不存在时 会进行调用以获取值 我尝试的是这样的 class LazyMap extends Map use length for now When t
  • 保存大图像 - 光栅问题

    我已经问过如何保存大图像的问题 我认为我走在正确的轨道上 但我仍然需要一些建议 我有一个 12000 x 12000 的图像 我需要将其另存为 png 无法使用 BufferedImage 我已经被建议使用 RenderedImage 接口
  • 使 MediaController 显示而不隐藏

    我尝试使用 MediaController 来播放音乐 我希望 MediaController 出现 直到按下 后退 按钮 现在我尝试了下面的代码 MediaController mediaController new MediaContr
  • vim colorchem 显示不正确的颜色

    我刚刚抓住了 Ultimate Vim Distribution http vim spf13 com 它附带了一堆颜色方案 由于某种原因 在我的 vimrc 中设置颜色方案 例如 colorscheme 公司 会导致与颜色方案实际定义的颜
  • 为什么这个语句在 java 中不起作用 x ^= y ^= x ^= y;

    int x 1 int y 2 x y x y 我期望这些值被交换 但它给出 x 0 和 y 1 当我用C语言尝试时 它给出了正确的结果 您的陈述大致相当于此扩展形式 x x y y x x y 与 C 不同 在 Java 中 保证二元运算
  • 使用 ng-repeat 和过滤器时数组中对象的 $index

    我对 Angular 相当陌生 并且能够在某种程度上解决问题 但我似乎无法找到这个场景的答案 我有一系列对象 我正在从 firebase 中将其拉下来 我对对象使用 ng repeat 然后相应地显示数据 我试图将索引作为路由参数传递给 编
  • auto foo(...) ->decltype(this) 有一些解决方法吗?

    我有下一堂课 并尝试声明成员函数 该函数将返回指向该类型的指针 但下一个代码 template
  • Django Admin内联递归ManyToMany

    我有以下模型 其自身具有多对多关系 class Ticket models Model STATUS 0 Open 1 Closed status models SmallIntegerField default 0 choices STA
  • 将指针从基类型转换为子类型

    我正在为我的一个项目构建一个简单的游戏设计 我有以下课程 class Character public virtual void Display virtual void SetParameters char param class Non
  • 测量函数调用的 CPU 周期

    我正在寻找一种方法来测量线程上的函数调用所占用的 cpu 周期 伪代码示例 void HostFunction var startTick CurrentThread CurrentTick does not exist ChildFunc
  • 为什么我的 R 中的“Fizz Buzz”测试不起作用?

    我听说这是一个常见的面试问题 请问这里有什么想法 谢谢 for i in 1 100 if i 15 0 print fizzbuzz else if i 3 0 print fizz else if i 5 0 print buzz el
  • 当 Spark 主内存无法容纳文件时,Spark 如何读取大文件(PB)

    在这些情况下大文件会发生什么 1 Spark从NameNode获取数据的位置 Spark 是否会同时停止 因为根据 NameNode 的信息 数据大小太长 2 Spark按照datanode块大小对数据进行分区 但所有数据不能存储到主内存中
  • 选择带有 JavaScript 和/或 CSS 的 Shadow DOM?

    Chrome 似乎已被弃用 deep and gt gt gt and shadow https www chromestatus com features 6750456638341120 https www chromestatus c
  • 从 Pandas Dataframe 中删除取消行

    我有一份发给客户的发票清单 然而 有时会发送一张错误的发票 随后又被取消 我的 Pandas Dataframe 看起来像这样 除了更大 约 300 万行 index customer invoice nr amount date 0 1
  • 为什么“char **”类型的索引给出整个字符串?

    考虑这个片段 include