为什么将指针传递给具有常量指针类型参数的函数时不需要类型转换?

Rifat Rahman Riku

我用一个字符串初始化一个char[]数组:"hello"

char str[] = "hello";
func(str);

现在,char[]数组被传递给一个函数,带有一个const char*指针参数:

void func(const char* str)
{
    puts(str);
}

输出:

hello 

为什么我不需要将char[]数组类型转换为const char*指针?

阿努普·拉纳

为什么我不需要将 char 类型指针类型转换为 const char 类型指针?

因为隐式限定转换特别是,指向非常量类型的指针可以转换为指向相应const类型的指针。

这可以从隐式转换中看出:

指向 cv 限定类型的类型指针的纯右值T可以转换为指向更多 cv 限定的相同类型的纯右值指针T(换句话说,可以添加 constness 和易失性)。

“更多” cv-qualified 意味着

  • 指向非限定类型的指针可以转换为指向const;

    ...

(强调我的)

例如,

int i = 0;
const int *p = &i; // conversion to const happens here

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将 char** 传递给 void** 函数参数时,与指针类型不兼容的指针类型警告

为什么将取消引用的指针传递给指针类型?

为什么将ostream iomanip传递给operator <<时不需要模板参数?

C ++-17:将函数指针转换为具有不同参数指针类型的函数

为什么在为golang类型实现sort.Interface时不需要方法接收者是指针?

为什么将具有不同参数类型的函数存储到带有void *参数UB的函数指针中?

将指针传递给对象时类型转换为(void *)

为什么需要指针类型转换?

使用ctypes将类型指针的参数传递给C函数的指针

具有选项类型的类参数是否不需要传递值?

为什么JavaScript函数中的参数不需要var作为类型?

将内置类型变量传递给仅具有一个类类型参数的“ +”运算符时,用于自动类型转换的构造函数

为什么指针需要类型?

当将这些参数传递给类型化的函数时,为什么TypeScript不推断函数的参数类型?

将类型参数传递给自引用指针

将类型转换指针传递给pthread_join

为什么在声明使用命名空间std时将int用作指针参数传递给函数?

将数组指针传递给函数期望类型的接口

将整数常量转换为指针类型

为什么可变对象不需要双指针?

生成带有传递给模板的指针类型签名的函数

为什么C ++变量是指针时不需要正确定义?

为什么将“this”指针直接传递给存档错误,但另一个相同类型的指针可以?

为什么可以将未初始化的变量地址传递给函数的指针参数

传递重载的函数指针及其参数时的错误类型推断

将函数指针作为非类型模板参数传递

为什么我不需要将参数传递给 article_params?

将指针传递给类型定义的数组

将 props 传递给路由而不需要 URL 参数