|
|
1
10
数组是一种存储。在语法上,它被用作指针,但在物理上,这个结构中没有“指针”变量,只有三个整数。另一方面,int指针是存储在结构中的实际数据类型。因此,在执行强制转换时,可能是*使ptr接受数组中第一个元素的值,即1。 *我不确定这是否是真正定义的行为,但至少在最常见的系统上是这样工作的。 |
|
2
11
如果我在你的分析中忽略了什么,请原谅我。但我认为最根本的缺陷是这个错误的假设
没有什么能使它具有这种价值。相反,它很可能指向某个地方
因为您要做的是将组成整型数组的字节解释为指针。然后你给它加上一些东西和下标。 另外,我强烈怀疑您对另一个结构的强制转换实际上是有效的(如中所述,保证有效)。如果两个结构都是联合体的成员,则可以强制转换并读取其中一个结构的公共初始序列。但它们不在你的例子中。也可以强制转换为指向第一个成员的指针。例如:
|
|
|
3
3
声明一个灵活的数组成员。根据C标准(6.7.2.1第16段):
也就是说,它可以别名
|
|
|
4
0
必须要有明确的行为。从记忆的角度来考虑。 为了简单起见,假设我的_测试位于地址0x8000000。
当你把它转换成2字时,
要执行您想要的操作,您必须创建一个二级结构,并将数组的地址分配给ptr(例如,type2_p->ptr=type1_p->my_数组),或者将ptr声明为数组(或可变长度数组,例如int ptr[])。 或者,您可以以一种丑陋的方式访问元素: (&type2&u p->ptr)[0] , (&type2&u p->ptr)[1] . 但是,在这里要小心,因为 (&type2&u p->ptr)[0] 实际上是一个 INT* 不是一个 int . 例如,在64位平台上, (&type2&u p->ptr)[0] 实际将是0x100000002(4294967298)。 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |
|
|
tTt · 使用堆栈中的值重新分配指针 1 年前 |
|
|
manuel · 现代C中空指针的替代方案++ 1 年前 |