由于jtc -w'<Statement>l[Action]:<*>[-1][Resource]:>*<[-1]' file.json
的差异未涵盖且答案有误,因此它与上述问题并不重复。
这是有关进程内内存组织的基本细分问题,更具体地说是默认数组值。
在下面的代码中:
statics
在机器指令附近的内存块中静态分配,并在某些时候默认初始化为arr1
0
应该在创建功能框时分配在堆栈上,它永远不会默认初始化
arr2
与arr3
[?]
arr1
与arr4
[?]
arr2
...现在,除了上述两个问题外,我的主要问题是,类内的arr5
变量与函数内的static
变量有何不同?我无法访问未初始化的static
元素。在什么情况下可以?
arr5
输出:
int arr1[5];
void func() {
int arr2[5]; printf("%d\n", arr2[0]); // [2]
static int arr3[5]; printf("%d\n", arr3[0]); // [3]
}
class MyClass {
public:
int arr4[5];
static int arr5[5];
};
int main()
{
printf("%d\n", arr1[0]); // [1]
func();
MyClass obj;
printf("%d\n", obj.arr4[0]); // [4]
//printf("%d\n", obj.arr5[0]); // [5]
std::cin.get();
}
答案 0 :(得分:3)
根据this article声明了arr5,但未定义。
添加
$adminPermissions = collect(
array_merge(
$permissionsForPermissions,
$rolePermissions
)
)->map(function ($name) {
return Permission::create([
'name' => $name
]);
});
声明int MyClass::arr5[5];
后的。比您可以获得class MyClass
obj.arr5[0]
答案 1 :(得分:0)
arr1范围是全局的,并且一直存在到程序结束。 arr2范围是局部的,每次调用函数时都会创建和销毁它。
arr3范围是本地的。局部静态变量是在首次使用它们时创建的,并且不会在程序启动时进行初始化,并且会在程序存在时被销毁。 就范围和初始化时间而言,arr1和arr2不同。 arr1作用域是全局arr3局部(函数作用域)。程序启动时,将调用arr3初始化arr1。
arr4是MyClass成员,每次创建/销毁MyClass对象时都会创建/销毁它。只能通过MyClass对象访问它。所以arr4和arr2不一样。 arr5是静态类成员。它不与MyClass对象一起使用。您可以使用它而无需创建MyClass对象。您可以通过以下方式直接访问MyClass :: arr5。