示例c代码:
library("mice")
imp <- mice(nhanes)
fit <- with(imp, table(bmi, hyp))
est <- pool(fit)
# dimensions
nl <- length(fit$analyses)
nr <- nrow(fit$analyses[[1]])
nc <- ncol(fit$analyses[[1]])
# names
rnames <- rownames(fit$analyses[[1]])
cnames <- colnames(fit$analyses[[1]])
# cast list to array
fit.arr <- array(unlist(fit$analyses), dim=c(nr,nc,nl),
dimnames=list(rnames,cnames))
# get "mean" contingency table
apply(fit.arr, 1:2, mean)
# 1 2
# 20.4 1.8 0.0
# 21.7 1.4 0.0
# 22 1.4 0.2
# 22.5 1.8 0.4
# 22.7 1.2 0.4
# 24.9 1.2 0.0
# 25.5 1.0 1.6
# 26.3 0.0 1.0
# 27.2 0.4 1.0
# 27.4 1.4 0.4
# 27.5 1.6 0.2
# 28.7 0.0 1.0
# 29.6 1.0 0.2
# 30.1 1.8 0.2
# 33.2 1.0 0.0
# 35.3 1.2 0.2
示例输出:
#include <stdio.h>
int main (int argc, char** args) {
int k = 8;
int sendbuffer[k]; // VLA
for (int n = 0; n < k; n++) {
printf("sendbuffer[%i]: %i \n", n, sendbuffer[n]);
}
return 0;
}
sendbuffer[0]: 1
sendbuffer[1]: 0
sendbuffer[2]: 1583871280
sendbuffer[3]: 32767
sendbuffer[4]: 22544384
sendbuffer[5]: 1
sendbuffer[6]: 1713234504
sendbuffer[7]: 32767
中的数字来自哪里?为什么sendbuffer [2,4,6]是唯一再次运行代码时会发生变化的?
我在OSX El Capitan上使用clang编译器(使用sendbuffer[]
进行编译)
Apple LLVM版本7.3.0(clang-703.0.31)
目标:x86_64-apple-darwin15.4.0
线程模型:posix
如果与其他编译器/操作系统有不同的行为,我也想听听这些情况。
答案 0 :(得分:2)
这不仅适用于VLA;上面的行为是针对任何变量声明的。如果声明变量,例如
int a;
这将在堆栈上分配sizeof(int)
个字节,无论系统选择哪个地址。那里的记忆是 uninitalized ;它是当时正在发生的事情。程序员可以初始化内存。
答案 1 :(得分:2)
Online C 2011 standard,6.7.9 / 10:&#34;如果具有自动存储持续时间的对象未明确初始化,则其值不确定...&#34;
除非您在文件范围或使用static
关键字 1 声明它,否则变量不会被初始化为任何特定值;内容将是最后写入该内存位置的内容。
<小时/>
static
或在文件范围,也不能有明确的初始化程序。
答案 2 :(得分:0)
这些值称为垃圾值,它们是创建数组时解释为int
的内存中的任何值。
你的程序只是对操作系统说:“给我一部分内存”,操作系统会这样做,把它交给你的程序而不改变内容。