oc中对指针、对象和%@符号的理解
来源:互联网 发布:网站美工学那些软件 编辑:程序博客网 时间:2024/05/13 10:18
1.我们知道c语言中对于指针的操作是可以直接通过打印指针而得到对象的地址的,如下:
char *s = "abc";printf("s的值:%s",s);printf("s的地址:%p",s);
打印结果为:
s的值:abcs的地址:0x107f3ced8
我们知道s其实是指向数据常量区“abc”的一个指针,我们可以通过*s来获取字符串首字符的值:
printf("首字符为:%c",*s);
打印结果为:
首字符为:a
2. 如此我们联想oc当中的字符串NSString,现在我们用oc的方式初始化一个字符串:
NSString *str = @"abc";NSLog("str的值为:%@",str);NSLog("str的地址为:%p",str);
打印结果如下:
str的值为:abcstr的地址为:0x1027510c8
3. 通过以上结果分析,我们在打印oc中字符串的值的时候为什么不能像c语言中直接使用指针*str,而是直接用%@打印str就获得了对象的值了呢,为什么不是这样的:
NSLog("str的值为:%@",*str);
- 其实NSString本身是一个对象,它不同于char *这些基本类型。本质上OC的对象是一个结构体。
NSLog在打印%@格式的对象时,会直接调用对象的description方法。与基本数据类型的处理是有区别的。
例如下面的结构体:
typedef struct Object { char *string;} *Object;
打印的时候会进行如下:
Object obj = malloc(sizeof(Object));obj->string = "Hello";NSLog(@"%s", obj->string);
所以oc的%@也并不是意味着值的打印,它代表的是打印对象。
阅读全文
0 0
- oc中对指针、对象和%@符号的理解
- 对C++中对象指针的理解
- oc 指针和对象的区别
- 对OC中NSData使用的理解
- 对OC中NSData使用的理解
- C中对字符串和指针的理解
- C++中类的对象和指针的区别理解
- 对函数指针,指针函数和指针的指针理解。
- OC中对Block理解
- 用户界面中对View 和ViewGroup对象的理解
- js中对类和对象的理解
- java学习中对类和对象的理解
- 对C++中指针安全性的理解
- 对函数中指针传递的理解
- 对C++类的对象和类的指针的理解
- 对指针和引用的理解
- 对数组和指针的基础理解
- 对指针和数组名的理解
- Angular4-在线竞拍应用-依赖注入
- C语言资料收集的几张表格(文件打开方式,运算优先级,ASCII码表),供需要时查阅。
- Python进程管理工具Supervisor
- vue小笔记 打包之后,刷新页面出现404的问题
- 2017 icpc亚洲区预赛西安站 J LOL
- oc中对指针、对象和%@符号的理解
- 重复登录问题
- 单例模式(C++)
- 【清北学堂济南刷题班】集合
- 014-SDK框架LYWSDKDispatcher.h
- if语句(python)
- pygame游戏之旅14:添加icon和bgm音效
- CMake中调用自定义安装位置Eigen库的方法
- 全面解析redis cluster