Blocks 和变量

block块对:局部变量、__block变量、静态变量、全局变量四种变量的操作及其作用



#import <Foundation/Foundation.h>

int d = 40;//全局变量

int main(int argc, const char * argv[])
{
    int a = 10;//局部bianl
    int *p = &a;
    NSLog(@"a:%i",a);//对变量值和地址进行测试
    NSLog(@"a:%p",&a);
    
    __block int b = 20;//__block变量
    NSLog(@"b:%i",b);
    NSLog(@"b:%p",&b);
    
    static int c =30;//静态变量
    NSLog(@"c:%i",c);
    NSLog(@"c:%p",&c);
    
    NSLog(@"d:%i",d);
    NSLog(@"d:%p",&d);
    
    void (^myBlock)() = ^void()
    {
        //block块中对外面的变量都进行了一次复制,所以block块中变量的地址和外面的地址都发生了改变
        //x = 20;   不能改变局部变量的值,否则出错
        NSLog(@"a:%p",&a);
        *p = 11;//可以通过指针对改变局部变量赋值,但是这样并不能改变局部变量对值和地址
        NSLog(@"a:%i",a);
        NSLog(@"a:%p",&a);
        
        NSLog(@"b:%p",&b);
        b = 21;//可以对__block变量进行赋值操作,并且改变了变量的值和地址
        NSLog(@"b:%i",b);
        NSLog(@"b:%p",&b);
        
        NSLog(@"c:%p",&c);
        c = 31;//可以对静态变量进行赋值操作,改变了变量的值但是没有改变变量的地址
        NSLog(@"c:%i",c);
        NSLog(@"c:%p",&c);
        
        NSLog(@"d:%p",&d);
        d = 41;//可以对全局变量进行赋值操作,改变了变量的值但是没有改变变量的地址
        NSLog(@"d:%i",d);
        NSLog(@"d:%p",&d);
    };
    
    myBlock();
    NSLog(@"a:%i",a);
    NSLog(@"a:%p",&a);
    NSLog (@"b:%i",b);
    NSLog(@"b:%p",&b);
    NSLog(@"c:%i",c);
    NSLog(@"c:%p",&c);
    NSLog(@"d:%i",d);
    NSLog(@"d:%p",&d);
    
    a = 12;
    b = 22;
    c = 32;
    d = 42;
    
    NSLog(@"a:%i",a);
    NSLog(@"a:%p",&a);
    NSLog (@"b:%i",b);
    NSLog(@"b:%p",&b);
    NSLog(@"c:%i",c);
    NSLog(@"c:%p",&c);
    NSLog(@"d:%i",d);
    NSLog(@"d:%p",&d);
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值