OC对象与函数

下面将讲解如何将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;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值