相关疑难解决方法(0)

对于数组,为什么a [5] == 5 [a]?

正如Joel在Stack Overflow播客#34中用C编程语言(又名:K&R)所指出的那样,在C中提到了数组的这种属性:a[5] == 5[a]

乔尔说,这是因为指针运算,但我仍然不明白.为什么a[5] == 5[a]

c arrays pointers pointer-arithmetic

1567
推荐指数
16
解决办法
9万
查看次数

如何在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万
查看次数

什么是"跨度",什么时候应该使用?

最近我有建议span<T>在我的代码中使用's,或者在网站上看到了一些使用span's - 应该是某种容器的答案.但是 - 我在C++标准库中找不到类似的东西.

那么这个神秘的是什么span<T>,以及为什么(或什么时候)使用它是一个好主意,如果它是非标准的?

c++ c++-faq cpp-core-guidelines c++20 std-span

202
推荐指数
3
解决办法
4万
查看次数

数组名称是指针吗?

数组的名称是C中的指针吗?如果没有,数组的名称和指针变量之间有什么区别?

c arrays pointers

191
推荐指数
4
解决办法
6万
查看次数

为什么数组的地址等于它在C中的值?

在下面的代码中,指针值和指针地址按预期不同.

但数组值和地址不行!

怎么会这样?

产量

my_array = 0022FF00
&my_array = 0022FF00
pointer_to_array = 0022FF00
&pointer_to_array = 0022FEFC
Run Code Online (Sandbox Code Playgroud)
#include <stdio.h>

int main()
{
  char my_array[100] = "some cool string";
  printf("my_array = %p\n", my_array);
  printf("&my_array = %p\n", &my_array);

  char *pointer_to_array = my_array;
  printf("pointer_to_array = %p\n", pointer_to_array);
  printf("&pointer_to_array = %p\n", &pointer_to_array);

  printf("Press ENTER to continue...\n");
  getchar();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c arrays pointers

179
推荐指数
5
解决办法
7万
查看次数

将向量传递给函数,值与引用C++

我用C++编写代码.如果我有一些功能void foo(vector<int> test),我在程序中调用它,矢量是通过值还是引用传递的?我不确定,因为我知道向量和数组是相似的,并且类似的函数void bar(int test[])会通过引用(指针?)而不是值传递测试.我的猜测是,如果我想避免传递值,我需要明确地通过指针/引用传递向量,但我不确定.

c++ arrays vector

75
推荐指数
3
解决办法
11万
查看次数

为什么这个'for'循环不是有效的?

来自Lippman的C++ Primer第5版,第182页,考虑:

int ia[3][4];
for (auto row : ia)
        for (auto col : row)
Run Code Online (Sandbox Code Playgroud)

第一个for遍历ia,其元素是大小为4的数组. 因为row它不是引用,当编译器初始化时,row它会将每个数组元素(与数组类型的任何其他对象一样)转换为指向该数组的第一个元素的指针.结果,在这个循环中的类型rowint*.

我不是很确定我理解这个自动如何工作,但如果我可以假设它自动给出一个基于ia数组成员类型的行的类型,但我不明白为什么这种for行,其中行不是引用,无效.为什么会发生这种情况?"指向该数组的第一个元素的指针",因为什么?

c++ arrays c++11

65
推荐指数
2
解决办法
3949
查看次数

数组衰减为指针的例外情况?

我在许多帖子中都看到"在大多数情况下,数组名称会衰减为指针".
我可以知道在什么情况下/数组名称表达式不会衰减成指向其第一个元素的指针吗?

c arrays pointers

56
推荐指数
1
解决办法
1万
查看次数

'\ 0'计算为false,"\ 0"计算为true

灵感来自K&R第5.5节中描述的程序:

void strcpy(char *s, char *t)
{
    while(*s++ = *t++);
}
Run Code Online (Sandbox Code Playgroud)

C程序

if ('\0') { printf("\'\\0\' -> true \n"); }
else      { printf("\'\\0\' -> false\n"); }

if ("\0") { printf("\"\\0\" -> true \n"); }
else      { printf("\"\\0\" -> false\n"); }
Run Code Online (Sandbox Code Playgroud)

版画

'\0' -> false
"\0" -> true
Run Code Online (Sandbox Code Playgroud)

为什么'\0'"\0"评价不同的C 2

clang版本3.8.0

c arrays string null kernighan-and-ritchie

56
推荐指数
3
解决办法
6923
查看次数

C++ - char**argv与char*argv []

char** argv和之间有什么区别char* argv[]?在int main(int argc, char** argv)int main(int argc, char* argv[])

它们是一样的吗?特别是第一部分没有[].

c++ program-entry-point arguments

52
推荐指数
3
解决办法
4万
查看次数