面试题答案
一键面试- 能否直接访问:
- 在Objective - C代码中不能直接访问C语言代码块中的局部变量。
- 原因:
- 局部变量的作用域仅限于其定义所在的代码块。C语言代码块中的局部变量在该代码块结束时就会被销毁,其内存空间也会被释放。Objective - C代码处于不同的作用域,无法直接访问其他作用域中已销毁的局部变量。
- 实现合理访问的方法:
- 方法一:通过函数参数和返回值
- 在C语言代码中,将需要访问的值作为函数的返回值返回给Objective - C代码。例如:
- 方法一:通过函数参数和返回值
int getLocalValue() {
int localVar = 10;
return localVar;
}
在Objective - C代码中调用这个函数:
#import <Foundation/Foundation.h>
int getLocalValue();
int main(int argc, const char * argv[]) {
@autoreleasepool {
int value = getLocalValue();
NSLog(@"The value from C local variable: %d", value);
}
return 0;
}
- 方法二:使用全局变量
- 在C语言文件中定义一个全局变量。例如:
int globalVar;
void setGlobalVar() {
int localVar = 20;
globalVar = localVar;
}
在Objective - C代码中访问这个全局变量:
#import <Foundation/Foundation.h>
extern int globalVar;
void setGlobalVar();
int main(int argc, const char * argv[]) {
@autoreleasepool {
setGlobalVar();
NSLog(@"The value from C local variable via global: %d", globalVar);
}
return 0;
}