下面将讲解如何将OC语言与C语言混合编程;
#import <Foundation/Foundation.h>
@implementation Bird :NSObject
{
@public
int height;
}
-(void)fly
{
NSLog(@"鸟儿飞了%i高!",height);
}
@end
//C语言函数使用的是传参的方式
void test(Bird *myb)
{
myb->height = 300;
}
int main(int argc,char *argv[])
{
Bird *b = [Bird new];
b->height = 200;
test(b);
[b fly];
}
程序运行结果:
如果代码改为
#import <Foundation/Foundation.h>
@implementation Bird :NSObject
{
@public
int height;
}
-(void)fly
{
NSLog(@"鸟儿飞了%i高!",height);
}
@end
void test(Bird *myb)
{
// myb->height = 300;
Bird *b2 = [Bird new];
b2->height = 500;
myb =b2;
}
int main(int argc,char *argv[])
{
Bird *b = [Bird new];
b->height = 1000;
test(b);
[b fly];
你认为程序输出是咋样的?是
鸟儿飞了500高!么?那就错了,正确的结果为1000
程序运行的结果为:
下面讲解一下程序运行的过程
main函数内部创建一个Bird对象(包含height属性和fly方法)指针变量C指向Bird对象,调用test函数,test函数中的指针变量myb指向变量b,所以其实myb指向的是Bird对象,这时test函数创建新的对象Bird,指针变量b2指向新的对象
代码myb =b2;使myb指针变量指向b2
执行完test(b),这时候myb和b2指针撤销,所以指针变量b指向的依旧是刚开始的Bird 的地址,所以执行的结果依旧是1000;