iOS面试题传智播客2014版(附答案)

### iOS面试题解析####一、Objective-C面试题解析**题目:** ```c main() { int a[5] = {1, 2, 3, 4, 5}; int *ptr = (int *)(&a + 1); printf("%d,%d", *(a + 1), *(ptr - 1)); } ``` **答案:** 2,5 **解析:**此题考察的是指针和数组的概念。`int a[5] = {1, 2, 3, 4, 5};`定义了一个包含五个整数的数组`a`。 - `*(a + 1)`访问的是数组`a`的第二个元素,即`a[1]`,其值为2。 - `int *ptr = (int *)(&a + 1);`这里涉及到指针的加法运算。`&a`获取的是数组`a`的地址,但由于`&a`实际上是一个指向数组的指针(类型为`int(*)[5]`),所以`&a + 1`实际上是指向数组`a`后面的一个相同大小的对象的地址,即`a[5]`的地址。因此,`ptr`指向了数组`a`的结尾之外的位置。 - `*(ptr - 1)`访问的是`ptr`前一个位置的值,即数组`a`的最后一个元素,其值为5。 **总结:**此题强调了数组名和指针之间的转换,以及指针运算的细节,特别是数组指针的加法操作会根据数组的大小进行偏移。 ####二、C++sizeof运算符的使用**题目:**考虑以下Windows NT下的32位C++程序: - `void Func(char str[100]) { sizeof(str) = ? }` - `void *p = malloc(100); sizeof(p) = ?` **解析:** 1. **`Func(char str[100])`函数内的`sizeof(str)`:**当数组作为函数参数传递时,数组会退化为指向数组第一个元素的指针。因此,在函数内部,`str`实际上就是一个指针,它的类型是`char *`。在32位系统中,指针大小固定为4字节,所以`sizeof(str)`的结果是4。 2. **`sizeof(p)`:**变量`p`是一个指向任意类型的指针,其大小也是4字节,因此`sizeof(p)`同样为4。 **总结:**此题考察了C/C++中数组和指针的处理方式,以及`sizeof`运算符的应用。特别注意数组退化为指针的情况,以及不同类型指针的大小。 ####三、Cocoa指针和引用的使用**题目:** ```objective-c - (void) getNSString(const NSString *inputString) { inputString = @"This a main test "; return; } int main(void) { NSString *a = @"Main"; NSString *aString = [NSString stringWithString: getNSString(a)]; NSLog(@"%@ ", aString); } ``` **答案:**输出字符串为`NULL`。 **解析:** 1. **`getNSString`方法:**此方法接收一个`NSString`的指针,并试图修改该指针所指向的内容。但在C和Objective-C中,这种修改不会生效,因为传递给函数的参数是值的副本,而不是引用。 2. **`main`方法:**在主函数中,尝试调用`getNSString`方法并获取返回的字符串,但实际上该方法并没有返回任何值。因此,`aString`实际上是一个空值(`nil`)。 **总结:**此题考察了Objective-C中的指针和方法调用规则。需要注意的是,方法调用时传递的是指针的副本,而非引用。另外,如果方法没有明确返回值,则默认返回`nil`。 ####四、宏定义**题目:**用预处理指令`#define`声明一个常数,以表示一年中秒的数量(忽略闰年问题)。 **答案:** ```c #define SECONDS_PER_YEAR (60 * 24 * 365)UL ``` **解析:** 1. **宏定义的基本语法:**此处展示了宏定义的基本语法,包括不以分号结束、括号的使用等。 2. **预处理器计算:**宏定义中的表达式会被预处理器计算,因此直接写出表达式而不计算出实际的值更加清晰且不会产生额外开销。 3. **长整型符号:**由于表达式可能超过16位整型数的范围,使用长整型符号`L`来确保常数值为长整型。 4. **无符号长整型:**使用`UL`表示无符号长整型,以适应更大的数值范围。 **总结:**此题考察了宏定义的基本概念和技巧,包括宏定义的语法、预处理器的行为以及数据类型的使用。 ####五、编写宏和委托接口**题目:** 1.写一个“标准”宏`MIN`,该宏接受两个参数并返回较小的一个。 2.写一个委托的interface。 **答案:** 1. **宏定义:** ```c #define MIN(A, B) ((A)
doc 文件大小:89KB