我有以下代码.
#include <iostream>
int * foo()
{
int a = 5;
return &a;
}
int main()
{
int* p = foo();
std::cout << *p;
*p = 8;
std::cout << *p;
}
Run Code Online (Sandbox Code Playgroud)
而代码只是运行而没有运行时异常!
输出是 58
怎么会这样?本地变量的内存不能在其功能之外无法访问吗?
我可以在Excel VBA中使用哪些函数来切片数组?
有没有办法在VBA(或VB6)中复制数组引用?
在VBA中,数组是值类型.将一个数组变量分配给另一个数组变量复制整个数组.我想得到两个数组变量指向同一个数组.有没有办法实现这一点,可能使用一些API内存函数和/或VarPtr函数,实际上返回VBA中变量的地址?
Dim arr1(), arr2(), ref1 As LongPtr
arr1 = Array("A", "B", "C")
' Now I want to make arr2 refer to the same array object as arr1
' If this was C#, simply assign, since in .NET arrays are reference types:
arr2 = arr1
' ...Or if arrays were COM objects:
Set arr2 = arr1
' VarPtr lets me get the address of arr1 like this:
ref1 = VarPtr(arr1)
' ... But I don't know of a …Run Code Online (Sandbox Code Playgroud) 我该如何实现这个功能?
Public Function ArraySlice(arr As Variant, dimension as Long, index as Long) As Variant
'Implementation here
End Function
Run Code Online (Sandbox Code Playgroud)
假设我想要一个数组切片.我在该维度上指定了一个数组,一个维度和一个索引,我想要切片.
举一个具体的例子,假设我有以下5x4 2D数组
0 1 2 3 4
______________
0| 1 1 2 3 1
1| 3 4 2 1 5
2| 4 5 3 2 6
3| 3 5 2 1 3
Run Code Online (Sandbox Code Playgroud)
如果水平尺寸为1且垂直尺寸为2,则返回值ArraySlice(array, 1, 3)将为1x4 2D阵列.选定的维度2被展平,唯一剩下的值是最初在维度2的索引3处的值:
0
____
0| 3
1| 1
2| 2
3| 1
Run Code Online (Sandbox Code Playgroud)
你会如何在VBA中实现这一点?我能想到的唯一实现将涉及CopyMemory,除非我限制了允许的维度数量并对每种情况进行硬编码.
注意:这是我如何获得数组的尺寸
UPDATE
以下是一些操作示例
对于2D阵列
0 1 2 3 4
______________
0| …Run Code Online (Sandbox Code Playgroud) 我的问题很简单:像在C++中一样,是否有可能通过引用在VBA中检索数组的两个部分?我用C++编写代码已经有一段时间了,所以我不记得我现在是怎么做的.也许如果我记得,我会有一个例子.
我想要做的是通过单个Double-type属性对对象数组进行排序.我之前在C++中做过,只是没有源代码了.
我怀疑有一个预定义的功能可用于此,但如果有人知道更好的解决方案,它将受到极大的欢迎.;)
这基本上就是我想要的:
source array(0, 1, 2, 3, 4, 5)
split source array in two
array a(0, 1, 2)
array b(3, 4, 5)
set array a(0) = 4
array a(4, 1, 2)
array b(3, 4, 5)
source array(4, 1, 2, 3, 4, 5)
Run Code Online (Sandbox Code Playgroud)
当然这只是一个抽象的描述.
如果已经有一个问题处理这件事我很抱歉,我当时还没有找到它.