相关疑难解决方法(0)

如何在C++中使用数组?

C++从C继承了数组,几乎无处不在.C++提供了易于使用且不易出错的抽象(std::vector<T>自C++ 98和C++ 11std::array<T, n>以来),因此对数组的需求并不像在C中那样频繁出现.但是,当您阅读遗产时代码或与用C编写的库交互,你应该牢牢掌握数组如何工作.

本FAQ分为五个部分:

  1. 类型级别的数组和访问元素
  2. 数组创建和初始化
  3. 赋值和参数传递
  4. 多维数组和指针数组
  5. 使用数组时常见的陷阱

如果您觉得此常见问题解答中缺少重要内容,请写下答案并将其作为附加部分链接到此处.

在下文中,"数组"表示"C数组",而不是类模板std::array.假定了C声明符语法的基本知识.请注意,面对异常,手动使用newdelete如下所示是非常危险的,但这是另一个常见问题解答的主题.

(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)

c++ arrays pointers c++-faq multidimensional-array

469
推荐指数
5
解决办法
12万
查看次数

可用的指向C++中具有未指定边界的数组的情况(不在C中)

考虑以下代码:

int main() {
    int (*p)[]; // pointer to array with unspecified bounds

    int a[] = {1};
    int b[] = {1,2};

    p = &a; // works in C but not in C++
    p = &b; // works in C but not in C++

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在纯C中,您可以指定指向任何维度的数组的此类地址的指针.但是在C++中你不能.我发现编译器允许为这样的指针赋值的一种情况:

struct C
{
    static int v[];
};

int main() 
{
    int (*p)[] = &C::v; // works in C++ if 'v' isn't defined (only declared)
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但找不到此代码的任何有用案例.

任何人都可以给出一个有用的示例(在C++中)指向具有未指定边界的数组的指针吗?或者只剩下来自C的遗迹?

c++ arrays pointers backwards-compatibility

32
推荐指数
1
解决办法
1532
查看次数

为什么g ++会出错:在初始化时无法将'int(*)[3]'转换为'int(*)[]'

当我尝试用g ++编译以下代码时:

int main()
{
    int a[3] = {0, 1, 2};
    int (* p)[] = &a;
}
Run Code Online (Sandbox Code Playgroud)

编译器给出以下错误:"无法在初始化中将'int()[3]'转换为'int()[]'.为什么不能将int()[3]转换为int()[]?如果不可能,那么应该如何初始化'int(*)[]'类型的变量?

c++ arrays pointers

2
推荐指数
1
解决办法
6097
查看次数