c++ - 防止指针作为数组传递

标签 c++ arrays pointers language-lawyer

因此,虽然接受 array that has decayed to a pointer 是常见/典型的像下面这样

#include <iostream>

void example(int* data)
{
    std::cout << data[0] << ' ' << data[1] << ' ' << data[2] << std::endl;
}

int main()
{
    int data[3] = {1, 2, 3};
    example(data);
}
我注意到你似乎也可以做相反的事情。也就是说,您可以将一个指针传递给数组,该指针将不衰减(?)
#include <iostream>

void example(int data[3])
{
    std::cout << data[0] << ' ' << data[1] << ' ' << data[2] << std::endl;
}

int main()
{
    int data[3] = {1, 2, 3};
    example(data);
    example(nullptr);  // Is this legal? Can I prevent this?
}
请注意 data example 的论据已更改为 int*int[3]但我还是能通过nullptr .将参数更改为 std::array<int, 3>显然会阻止这种情况,但我很好奇标准是否描述了这种隐式转换?有很多关于“数组到指针”隐式转换的评论,但这似乎是相反的。

最佳答案

实际上,

void example(int data[3])
void example(int data[])
或者
void example(int* data)
你需要
void example(/*const*/ int (&data)[3])
有数组引用,(因此拒绝不同大小的指针或数组)。

关于c++ - 防止指针作为数组传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68745573/

相关文章:

c - 为什么在检查 'exit' 字符串时我的代码没有在循环内终止?

java - 我怎样才能打乱一个单词的字母?

c - 如何用指向存储在另一个数组中的字符串的指针填充字符指针数组?

c - 对包含数组的结构使用 free()

c++ - 在 B 类中声明为友元的 A 类成员模板函数无法访问 A 类的私有(private)成员(仅限 Clang)

c++ - 在 Qt GUI 中加载和显示图像

javascript - 使用 every 时如何跳过一个元素

c - 为什么 C 允许我们将 2D 数组视为 1D 数组?

c++ - 指定初始值设定项中参数列表的大括号数量

c++ - 函数模板的非最后默认模板参数