MST

星途 面试题库

面试题:Objective-C中联合存储(union)在数据类型里如何定义及初始化

请使用Objective-C代码示例说明如何定义一个包含不同数据类型成员的联合存储(union),并对其进行初始化操作,同时解释联合存储的特点和适用场景。
16.2万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

定义和初始化联合存储的Objective-C代码示例

#import <Foundation/Foundation.h>

// 定义一个联合
union Data {
    int intValue;
    float floatValue;
    char charValue;
};

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        union Data data;
        // 初始化联合,这里选择初始化intValue
        data.intValue = 10;
        
        NSLog(@"intValue: %d", data.intValue);
        // 这里如果访问floatValue或charValue,得到的是未定义行为,因为刚刚初始化的是intValue
    }
    return 0;
}

联合存储的特点

  1. 共享内存:联合的所有成员共享同一块内存空间,其大小为联合中最大成员的大小。例如上述union Data,如果int是4字节,float是4字节,char是1字节,那么union Data的大小为4字节。
  2. 同一时间只有一个成员有效:由于共享内存,在任意时刻只有最后一次赋值的成员是有效的,访问其他成员会导致未定义行为。

适用场景

  1. 节省内存:当程序需要在不同时刻使用不同类型的数据,但不需要同时使用时,可以使用联合来节省内存。例如,一个表示图形的结构体,可能有时是圆形(半径为float类型),有时是正方形(边长为int类型),使用联合可以让这两个属性共享内存。
  2. 与C语言交互:在与C语言交互的场景中,特别是涉及到C语言库中使用联合的情况,Objective-C需要能够正确处理联合数据结构。