Blocks 和变量
来源:互联网 发布:鲜卑利亚 知乎 编辑:程序博客网 时间:2024/06/05 19:40
block块对:局部变量、__block变量、静态变量、全局变量四种变量的操作及其作用
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;
}
0 0
- Blocks 和变量
- 声明和创建blocks
- Blocks和Variables
- Code::Blocks和Debug
- ninja blocks、SmartThings和Twine
- NSAutoreleasePool 和 @autoreleasepool blocks 区别
- Blocks 的解释和使用
- blocks
- Blocks
- Blocks
- Blocks
- Blocks
- Blocks
- Blocks
- Blocks
- 深入探究Blocks----------截获不同种类的自动变量
- 瞎扯Boost、Code::Blocks和D
- Code::Blocks 和 Qt 的集成
- 动态规划算法及代码
- 第七周项目四 求圆柱体的表面积和体积
- 树链剖分学习
- bash漏洞补丁安装与下载,10月9日整理
- gdb调试多进程和多线程命令
- Blocks 和变量
- cocos2dx 3.1.1移植安卓apk (lua项目交叉编译 mac环境下)
- 链队列
- 马氏距离与欧式距离
- opencv程序十三:读取摄像头或视频文件
- Sqlite3安装与使用
- 并查集总结
- java static的加载顺序
- 分数变小数该方法不可行