当指针数组第一次被定义时,c如何给它赋值?

当指针数组第一次被定义时,c如何给它赋值?,c,C,我有一个int指针数组 int *ints[3]; 定义此数组时,内存会发生什么变化?存储的初始指针值是什么?当我尝试去引用一个值时,我得到一个分段错误,它告诉我这些值是任意的 这取决于阵列的存储 如果它具有静态存储,即在任何函数或 在函数中用static声明,则所有元素都将为NULL 如果它是在函数中声明的,没有static,它将具有 自动存储,初始值将不确定 该标准在这方面非常明确和有用: 如果未初始化具有自动存储持续时间的对象 显然,它的值是不确定的。如果对象具有静态 或者线程存储持续时

我有一个int指针数组

int *ints[3];

定义此数组时,内存会发生什么变化?存储的初始指针值是什么?当我尝试去引用一个值时,我得到一个分段错误,它告诉我这些值是任意的

这取决于阵列的存储

如果它具有静态存储,即在任何函数或 在函数中用static声明,则所有元素都将为NULL

如果它是在函数中声明的,没有static,它将具有 自动存储,初始值将不确定

该标准在这方面非常明确和有用:

如果未初始化具有自动存储持续时间的对象 显然,它的值是不确定的。如果对象具有静态 或者线程存储持续时间未显式初始化,则:

如果有指针类型,则初始化为空指针; 如果有算术类型,则初始化为正或无符号零; 如果它是聚合,则根据这些规则递归初始化每个成员,并且任何填充都初始化为零 位;
它取决于阵列的存储

如果它具有静态存储,即在任何函数或 在函数中用static声明,则所有元素都将为NULL

如果它是在函数中声明的,没有static,它将具有 自动存储,初始值将不确定

该标准在这方面非常明确和有用:

如果未初始化具有自动存储持续时间的对象 显然,它的值是不确定的。如果对象具有静态 或者线程存储持续时间未显式初始化,则:

如果有指针类型,则初始化为空指针; 如果有算术类型,则初始化为正或无符号零; 如果它是聚合,则根据这些规则递归初始化每个成员,并且任何填充都初始化为零 位;
我认为应该注意的是,不确定与随机不同。这种区别对于指针可能不太重要,因为使用随机指针与使用不确定指针一样是一个问题,但对于支持陷阱表示的硬件上的数字类型,随机可以表示任何有效值,然而,不确定值可能是陷阱表示。它对指针和整数类型同样重要。整数的陷阱是指针的未对齐值。即使一个指针偶然指向了有效内存,如果它没有与基类型对齐,它仍然可以在访问对象时发出信号。我相信应该注意的是,不确定与随机不同。这种区别对于指针可能不太重要,因为使用随机指针与使用不确定指针一样是一个问题,但对于支持陷阱表示的硬件上的数字类型,随机可以表示任何有效值,然而,不确定值可能是陷阱表示。它对指针和整数类型同样重要。整数的陷阱是指针的未对齐值。即使一个指针偶然指向有效内存,如果对象没有与基类型对齐,它仍然可以在访问对象时发出信号。