我尝试了这个简单的程序:
int* getElement(int arrayy[], int index) {
return &arrayy[index];
}
int main() {
int arrayy[4]{};
*getElement(arrayy, 2)=50;
std::cout << arrayy[2] << '\n';// here it prints 50 !
return 0;
}
getElement()
将通过指针返回返回我的数组的一个元素的地址,在main中取消引用它,然后更改值。
我想用std::array
代替经典数组来做同样的事情。
int* getElement(std::array<int, 4> arrayy, int index) {
return &arrayy[index];
}
int main() {
std::array<int, 4> arrayy{};
*getElement(arrayy, 2)=50;
std::cout << arrayy[2] << '\n';//here it prints 0 !
return 0;
}
第一个印50,第二个印0!
std::array
是否在调用中按值传递?
std::array在调用中是否通过值传递?
是的。 这样做(传递并返回对象)的能力本质上是std::array存在的原因。
因此,函数参数是函数的本地参数,您返回一个指向这个本地对象的指针,一旦函数返回,这个指针就变成了无效指针。
缺省情况下,C++中的所有内容都按值传递。 即使是传统的数组示例也会按值传递指针。 当然你可以用指针来改变它所指向的东西。
您的代码实际上具有未定义的行为,因为您返回的指针指向已被销毁的对象的内部,即GetElement
的arrayy
参数,该参数在退出函数时被销毁。
如果要按引用传递,则必须请求引用
int* getElement(std::array<int, 4>& arrayy, int index) {
return &arrayy[index];
}
参数类型名称后面的&
起到了很大的作用。
在通过复制传递指针的情况下,指向的at值在函数和调用站点中是相同的。 所以第一个程序做了您期望的事情。
在第二个程序中,它是不同的,因为std::array
具有值语义,因此通过副本传递它意味着您也传递了所有底层内存的副本。 如果想要获得与第一个程序相同的效果,则需要通过引用传递std::array
:
int* getElement(std::array<int, 4> &arrayy, int index) {
// ^ reference
return &arrayy[index];
}
注意,在您的第二个程序中的代码中,0
的结果是不保证的。 您正在返回一个指针,该指针指向复制的std::array
中的一个值,当函数返回时,该值将终止。 这将调用未定义的行为。
我在将对象 stdClass 转换为数组时遇到问题。我尝试过这种方式: 或 或 投射前的数组满了一条记录,在我尝试投射后它是空的。如何在不删除其行的情况下转换/转换它? 转换前的数组: 如果我尝试生成<code>var_dump($booking),则after cast为空NULL 我也尝试过这个函数,但总是空的:
本文向大家介绍浅谈Javascript 数组与字典,包括了浅谈Javascript 数组与字典的使用技巧和注意事项,需要的朋友参考一下 Javascript 的数组Array,既是一个数组,也是一个字典(Dictionary). 先举例看看数组的用法。 上面的代码创立了一个数组,每个元素都是一个字符串对象。 然后对数组进行遍历。注意 i 的结果为 0 和 1,a[i] 的结果才为字符串。 这个很象
本文向大家介绍Objective-C 经典字典数组排序 - 省市区,包括了Objective-C 经典字典数组排序 - 省市区的使用技巧和注意事项,需要的朋友参考一下 1.首先要准备好包含所有省市区的文档,将文档拖到我们建好的Xcode里 2.然后新建一个路径NSString *path = @" "; 再将省市区文档拖到@" "中; 3.在进行排序前,我们首先要先滤清思路:这答题的难题是在
本文向大家介绍Javascript数组与字典用法分析,包括了Javascript数组与字典用法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了Javascript数组与字典用法。分享给大家供大家参考。具体分析如下: Javascript 的数组Array,既是一个数组,也是一个字典(Dictionary). 先举例看看数组的用法。 上面的代码创立了一个数组,每个元素都是一个字符串对象。
问题内容: 我有一个排序的数组,想要对它进行二进制搜索。 所以我想问一下Swift库中是否已有诸如sort等的东西?还是有类型独立版本可用? 当然,我可以自己编写它,但是我想避免再次发明轮子。 问题答案: 这是使用二进制搜索的通用方法:
vector 是可变大小的数组。和 slice(切片)类似,它们的大小在编译期不可预知,但他们可以随时扩大或缩小。一个 vector 使用 3 个词来表示:一个指向数据的指针,它的长度,还有它的容量。此容量表明了分配多少内存给这 vector。vector 只要小于该容量,就可以随意增长。当临界值就要达到时,vector 会重新分配一个更大的容量。 fn main() { // 迭代器可以
问题内容: 我有一个numpy数组,其中特定行的每个单元格代表一个功能的值。我将它们全部存储在100 * 4矩阵中。 知道如何将每个值都介于0和1之间的numpy.array的行标准化吗? 我想要的输出是: 提前致谢 :) 问题答案: 如果我理解正确,那么您要做的就是除以每一列中的最大值。您可以使用广播轻松地做到这一点。 从示例数组开始: 在第0维(即行)上取最大值。这为您提供了一个大小向量,其中
问题内容: 我试图了解何时使用React功能组件和类,并从文档中阅读它们并没有真正详细介绍。当您希望类的特定功能构成组件时,能否给我下面的一些主要例子? 功能组件的功能较弱,但更简单,并且仅使用一个render()方法就类似于类组件。除非您需要仅在类中可用的功能,否则我们建议您改用功能组件。 问题答案: 您仅在以下情况下需要组件: 需要组件 状态 或 需要 生命周期方法 。例如等