|
|
1
33
为了稍微扩展一下,请记住C++数组是 精确地 C数组。所以,你所拥有的只是一段内存的地址,它声称(没有保证)是一组东西。 更新好吧,我们再扩大一点。 C(因此C++)并没有真正的“数组”。它只有地址和指针。所以当你把某个东西做成“数组”时,真正发生的是你告诉编译器某个变量代表一个地址。 在C中区分a和b是有用的 声明 和一个 定义 在声明中,你只是给某物一个名称和一个类型;在定义中,您实际上是在分配空间。 所以,如果我们从定义一个数组开始,比如
这意味着我们告诉编译器我们需要100的空间
如果我们定义一个变量
我们正在为一个包含地址的变量定义空间。它的大小将是
这
名字
数组的
现在,为了方便起见,我们假设我们的数组
这个名字
出于同样的原因,你不能说
即,你不能改变1000的值。(在FORTRAN的早期版本中,由于复杂的原因,这个技巧是可行的。这是一个错误。除非你尝试调试一个“2”值为3的程序,否则你永远活不下去。)
C中的数组总是从零开始的,也就是说,第一个索引总是零。任何其他索引都只是使用索引计算的地址。所以,
这被称为 数组引用 .
当我们使用语法时
这叫做 引用指针 . 如果我们说
然后
当我们说
问题是,C不知道或不太关心数组到底有多大
(记住C来自电话公司。“我们不在乎;我们不必。我们是电话公司。”) 所以,现在,我们知道了一些规则,我把它们搬到了这里。阅读“as”相当于“or”与“相同”。 你可以依靠的是:
由于C不知道指针和数组之间的区别,您可以声明其中之一。当你定义一个函数时,你可以写
或
并获得完全相同的效果。
这是上面。无论你在哪里写作
上面也解释了这一点。当你索引数组时,比如
现在,这都是C,由于C++被定义为“一种”C,因此它也适用于C++。除了
在C++中,你可以决定定义一个新类型,它的行为就像任何其他类型一样,但你可以改变语言做特定事情的方式。所以,程序员 能 决定用他们自己设计的东西“重载”(即替换)数组引用和指针解引用运算符的默认行为。作为一个初学者,你不应该很快遇到这种情况,但你应该意识到这一点。 |
|
2
19
你不应该使用
旁注:
根据经验,一定要注意
|
|
3
4
我看到你包括
|
|
|
4
2
|
|
|
5
0
除了上述所有答案外,您可能还想查看Q&关于c-faq.com的数组: http://c-faq.com/aryptr/index.html |
|
|
6
0
不幸的是,在C或C++中很难做到你想做的事情。你可以像这样传递一个固定大小的数组:
但是,数组的大小不是由数字定义的,而是由初始化列表中的元素数量定义的。 在你的情况下,要做的事情(即使这真的是一件错误的事情)是分两步做:
太糟糕了,它不会做你需要做的事情:将数组传递给这样的函数会复制数组,排序的目的是更改原始数组。 事实上,如果不理解“指针”的概念,你就无法走得更远。 你需要开发的功能应该是这样的:
换句话说,你传递一个指向第一个元素的指针和元素的数量。 或者,您可以处理向量。Vector将相同的两个东西(指向第一个元素的指针和大小)封装在一个称为“对象”的实体中。此外,它还为您管理内存,因此您可以根据需要扩展元素的数量。这就是C++的方式。遗憾的是,你无法像初始化数组那样,使用{…}来初始化向量。 |
|
|
7
0
看起来你同时使用了动态分配数组和向量,而我认为只使用std::vector就足够了。 首先,将输入数组更改为std::vector,并用输入数据填充它。
现在,重要的是声明你的mergesort函数来引用std::vector。
只是一个注释,看起来你没有进行就地排序,所以预计你的排序需要一段时间,因为你要复制大量数据。 |
|
|
DarkLite1 · 在提升模式下使用多个命名参数调用脚本 8 年前 |
|
|
Micolho · execute或字符串%s传递的查询参数之间的差异 8 年前 |
|
|
Rohit Kumar · 扩展类时构造函数出错 8 年前 |
|
|
user9489003 · ruby中proc的参数 8 年前 |
|
O.rka · 使用参数[重复]创建bash函数时出现语法错误 8 年前 |