Objective-C 里指针变量星号 * 你会放在哪个位置
来源:互联网 发布:淘宝英伦保罗男士钱包 编辑:程序博客网 时间:2024/04/28 04:01
Objective-C 里指针变量星号 * 你会放在哪个位置
2011-06-17 — Unmi话说在 Objective-C 里声明指针变量时,星号(*) 该放到哪个位置,是紧贴变量类型,紧贴变量名还是放它们之间两边用空格,或者全挤在一起?到底还是在思考 C/C++ 中指针变量的声明风格,因为 Objective-C 是 C 的超集。
纯粹讲 Objective-C 的代码风格,我觉得 Google 的 Google Objective-C Style Guide 非常有指导意义。转回来看 Objective-C 声明指针变量时什么风格好些,下面四种都符合语法:
NSString * name1 = @"Unmi"; //1. * 与变量类型与变量名之间都有空格 NSString* name2 = @"Unmi"; //2. * 紧挨变量类型,我推荐这种 NSString *name3 = @"Unmi"; //3. * 紧挨变量名 NSString*name4 = @"Unmi"; //4. * 变量类型、*、变量名紧挨在一起 NSLog(@"%@, %@, %@, %@", name1, name2, name3, name4);
。看显然,第四种风格是最不好看的,就像有人写 SQL 喜欢 “select*from table1" 一样
。第一种风格看似没有倾向性,谁也不依靠,但还是要否定它,仍然未向我们传达较明确的含义。
至于中间两种风格,即 * 是靠向变量类型还是靠向变量名,各有千秋,可以继续参考 Google C++ Style Guide 中关于 Pointer 的规范。其中否定了第一种写法,而且大约是没有提第四种写法的必要,第四种更是不可取的。对于中间两种都能接受,只是说要在你的项目中保持一致的风格。
我为什么会对指针变量的声明想那么多呢,来说说我的理解:
第二种写法,即 NSString* name2; 可以很直观的理解为变量类型就是 NSString* 这么一个指针类型,变量名为 name2,这于我们普通变量的声明方式是吻合的,因为接下来使用变量也是不用带 * 的 name2,而不是使用 *name2。这很好理解,就如 BOOL flag = YES; flag = NO; 一样自然。
而且类型与*号一体表示类型还体现在参数或方法的返回型或是强制转型的情况,那是没理由把 * 号与类型拆分开的,如
- (NSString*) foo : (NSString*) param;
NSString* name = (NSSting*) anyType;
第三种写法该如何理解呢?*号标记在变量名上,类型应该说是 NSString 的指针类型,反正我是觉得不好理解,不够自然。而唯一能说得通这么写的理由是在一行中声明多个指针变量时:
NSString *name1, *name2, *name3, *name4; //它们全是指针类型 name1 = name2 = name3 = name4 = @"Unmi"; //赋值 //不能用下面的方式,下面的 NSString 后的 * 只管到第一个,name1 //而后面的 name2, name3, name4 只认为是 NSString 类型 //NSString* name1, name2, name3, name4; //这样的话只有 name1 是指针类型 NSLog(@"%@, %@, %@, %@", name1, name2, name3, name4);
* 号紧贴变量名的方式好像只有在一行中同时声明多个指针变量时才通得过去,然而很多语言的规范都不推荐在一行中声明多个变量,所以似乎这种写法存在的理由也不够充分。
最后我还是觉得第二种像 NSString* name1; 的写法比较写意,并且也非常合乎规范,我就较喜欢这咱风格,可偏偏很多教材里热衷于第三种,即 NSString *name1 这样的风格。
你呢?也许本身就无足轻重!
本文链接 http://unmi.cc/objective-c-pointer-styles, 来自隔叶黄莺 Unmi Blog
- Objective-C 里指针变量星号 * 你会放在哪个位置
- Objective-C 里指针变量星号 * 你会放在哪个位置
- 定义指针变量时星号的位置
- 【0035】javascrip脚本放在哪个位置?
- Objective-C 中声明指针变量时 星号( *)如何安放 居左or居右
- css代码是放在html代码的哪个位置
- Delphi的世界,你在哪个位置?
- C/C++:我应该把星号放在什么地方?
- Objective - C UIActionSheet 图片相关 将选中图片放在指定位置并适应大小,长按保存
- 局部变量不一定放在堆栈里,还有可能只放在CPU寄存器里
- c语言中,指针*位置应该放哪里?
- 中国社会最新阶层划分:你在哪个位置?
- 分析JavaScript代码应该放在HTML代码哪个位置比较好
- weblogic中,如何保留编译jsp生成的中间文件,以及会放在哪个目录?
- 【Android开发】范例4-猜猜宝石放在哪个箱子里
- keil中的头文件是放在哪个文件夹里的
- C语言中全局变量存放在哪个位置?
- Objective-c在宏里拼接字符串
- Google 以图搜图 - 相似图片搜索原理 - Java实现
- 解决APK安装成功后点击"打开"再按Home键遇到的问题
- PHP导入Excel到MySQL的方法
- android 下写文件性能测试
- C++输出时小数点后的位数(iostream)
- Objective-C 里指针变量星号 * 你会放在哪个位置
- oracle job 应用
- <cocos2d-x for wp7>游戏中按返回键退回到菜单页面
- QLExpress脚本语言技术讲解(4)------扩展QLExpress来管理spring的bean,写出简单的脚本语言框架
- Flex滚动(3D Carousel)组件
- Windows 程序设计 相关的经典好书(备忘)
- 腾讯2012年实习生招聘笔试经历感悟(4月8号)
- PDF学习使用记录:修改文字和图片,插入图片
- bean作为jasperReport 的数据源