相关疑难解决方法(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万
查看次数

sizeof有两个论点

在C++ IS的C.1.3(2003.它也在C++ 11 IS中),该标准指出了ISO C和C++之间的差异; 即,为

char arr[100];
Run Code Online (Sandbox Code Playgroud)

sizeof(0, arr)以C语言返回sizeof(char*),但100在C++中.

我找不到sizeof两个参数的文档.明显的后备是逗号运算符,但我不这么认为:sizeof(arr)在C中100; sizeof(0, arr)sizeof(char*).两个sizeof(0, arr)sizeof(arr)100在C++中.

在这种情况下,我可能会忽略IS的重点.有人可以帮忙吗?这类似于09年讨论的问题,但没有人提到IS,我认为没有给出正确的答案.


编辑:实际上,IS正在谈论逗号运算符.因此,出于某种原因,在C中(0, arr)返回a char*,但char[100]在C++中返回a .为什么?

c c++ arrays pointers comma-operator

37
推荐指数
5
解决办法
2333
查看次数

&(*similarObject)和similarObject之间的区别?他们不一样吗?

有人可以向我解释一下

dynamic_cast<SomeObject *>( &(*similarObject) );
Run Code Online (Sandbox Code Playgroud)

做取消引用指针的地址有什么意义?指针本身不是它的地址吗?

c++ casting dynamic

29
推荐指数
2
解决办法
827
查看次数

var和&(*var)之间有什么区别

一些源代码使用符号&(*var),其中var已经是一个指针,喜欢int *var = ....

这两个符号之间有区别吗?

var != &(*var)吗?

示例:https://github.com/FreeFem/FreeFem-sources/blob/develop/src/medit/inout_popenbinaire.c#L40

c language-lawyer

8
推荐指数
2
解决办法
142
查看次数

为什么 C 中不允许给数组赋值?

如果我写:

int some_arr[4];
some_arr = {0, 1, 2, 3};
Run Code Online (Sandbox Code Playgroud)

然后我的编译器(在本例中为 GCC)会抱怨我之前没有表达式{。所以我需要使用复合文字,很好:

int some_arr[4];
some_arr = (int[]){0, 1, 2, 3};
Run Code Online (Sandbox Code Playgroud)

现在我们看到我不允许为数组赋值。

什么?

我可以用类似memcpy(some_arr, (int[]){0, 1, 2, 3}, sizeof(int[4])), 或通过some_arr逐一分配给每个元素(或通过循环)来“规避”这个问题。我无法想象 GCC 无法解析我所写的单个分配(一个不关心用户的懒惰编译器甚至可能在预处理器中完成它),所以它似乎归结为“标准说不”。那么为什么标准说这个特定的东西是禁止的呢?

我并不是在寻找标准中不允许这样做的语言,而是在寻找关于标准的这一部分是如何形成的历史教训。

c arrays standards

6
推荐指数
2
解决办法
439
查看次数