gpt4 book ai didi

C++:char* 与 char(*)[]

转载 作者:行者123 更新时间:2023-11-30 03:16:13 25 4
gpt4 key购买 nike

我是 C++ 的新手,遇到了这个问题,这是我的代码:

shared_ptr<char[]>var(new char[20]);

char *varptr = *(var.get());

所以我正在创建 char 数组的智能指针。

我遇到的问题是在编译期间它给我错误提示:

cannot convert argument 1 from 'char *' to 'char(*)[]'

正如 shared_ptr::get 的声明所说 T* get() const noexcept; 它返回模板的指针,在我的例子中是指向 char 的指针[]。取消引用它应该给我 char[] 并将它分配给 char* 应该没问题。

我好像漏掉了什么,也不知道是什么。

char*char(*)[] 有什么区别? char(*)[] 不就是一个char数组的指针吗?不应该将它分配给 char* 可以吗?

最佳答案

char(*)[] 是一个指向char 数组(未知大小)的指针,它可以指向一个数组。

char* 是一个指向char 的指针,它可以指向数组的一个元素。

从语义上讲,这两种类型非常不同。

要从 char(*)[] 中获取 char *,您需要获取指向数组特定元素(通常是第一个元素)的指针:

char* varptr = &(*var.get())[0];

如果您只需要一个字符串,那么请改用 std::string


为了解释指向元素的指针和指向数组的指针之间的区别,请考虑以下数组:

char a[3];

指向第一个元素(a[0])的指针可以表示为&a[0],这就是普通的a衰减到。指向整个数组的指针是 &a

如果我们展示它在内存中的布局,加上一些“指针”,它是这样的:

+------+------+------+-----| a[0] | a[1] | a[2] | ...+------+------+------+-----^      ^      ^      ^|      |      |      |a      a+1    a+2    ||                    |&a                   (&a)+1

即使通过指针a(等于&a[0])和&a指向同一个位置,它们也是两个不同的指针和对它们进行指针运算会做不同的事情。

关于C++:char* 与 char(*)[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56514098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com