Objective-C面试精华:理解指针与数组操作

需积分: 9 38 下载量 141 浏览量 更新于2024-09-14 收藏 28KB DOCX 举报
Objective-C面试题涵盖了Objective-C语言的关键知识点,对于求职者来说非常实用。以下是部分内容的深入解析: 1. **数组和指针操作**: 在提供的示例代码中,`main()` 函数展示了数组和指针的基础概念。`int* ptr = (int*)(&a+1);` 这一行看似简单,实则包含深意。`&a` 是数组 `a` 的首地址,由于 `a` 是一个整型数组,类型转换后 `ptr` 实际指向 `a` 的第五个元素(索引从0开始),因为数组在内存中的布局是以元素为单位的,所以加上 sizeof(int) * 5(在32位系统中为4字节*5)。因此,`*(a+1)` 访问的是 `a[1]`(值2),而 `*(ptr-1)` 访问的是 `a[4]`(值5)。 2. **函数参数和数组名**: 在函数 `voidFunc(char str[100])` 中,尽管 `str` 是一个字符数组的引用,但作为函数参数,它不再代表数组本身,而是变成了指向数组首元素的指针。在函数体内部,`sizeof(str)` 的值为4,因为指针在32位系统中通常占用4个字节。同样,`void* p = malloc(100);` 时,`sizeof(p)` 也是4,因为这是指针本身的大小。 3. **Cocoa编程中的指针和方法调用**: 提供的Cocoa代码中,`- (void)* getNSString(const NSString* inputString)` 函数接收一个 `const NSString*` 类型的指针。由于 `inputString` 是 `const`,在函数内部不能直接修改输入字符串,但可以返回一个新的 `NSString` 对象。在 `main()` 函数中,通过 `getNSString(a)` 获取到 `NSString` 的临时副本,并将其传递给 `-[NSString stringWithFormat:]` 方法创建新的字符串。 这些面试题考察了面试者对Objective-C语言中数组、指针、函数参数传递方式以及Cocoa框架中方法调用的理解。熟练掌握这些知识点对于在Objective-C面试中脱颖而出至关重要。在准备面试时,不仅要理解这些基本概念,还要能灵活运用它们解决实际编程问题。