首页 > 解决方案 > 你能解释一下这个类型转换是做什么的吗?

问题描述

给定一个字符串const char*

const char *str = "Hello, World!\n";

std::cout << *str;会给出H,但std::cout << *(char (*)[12])str;会给出完整的字符串Hello, World!

我可以理解这个演员需要 12 种数据,但是(*)这里是什么意思?

标签: c++

解决方案


但是这里的 (*) 是什么意思?

char [12]和之间的区别在于char (*)[12]前者是 12 个字符的数组,而后者是指向 12 个字符的数组的指针。

请注意,当您将数组(例如字符串文字)转换为指针类型时,它将首先衰减为指向数组第一个元素的指针。指向数组第一个元素的指针不能与指向数组本身的指针相互转换。因此,通过重新解释的指针间接导致未定义的行为。

PS 避免使用 C 风格的转换运算符,而是更喜欢使用 static_cast、reinterpret_cast 和 const_cast。避免将字符串文字转换为非常量,因为这很容易导致意外修改字符串文字,从而导致未定义的行为。

PPS 要打印整个字符串,请使用std::cout << str;. 这里不需要演员表。

那么char * [12]呢?

这是一个由 12 个指向 char 的指针组成的数组。


推荐阅读