在过去的一段时间,我开始从C的一些简单声明到更复杂的学习直到我开始学习了Objective-C中的blocks。我花了很长的一段时间去理解他并且认识到一旦你理解它是怎样组织的并且是怎样产生的,你就再也不用在你需要声明blocks的时候去谷歌上找了。
 
   如果你想自己能够想都不用想的写出block,那就读下去!
 
   我强烈建议不要去读过去的RSS阅读器或者以后的阅读器。它大量的有色地解释一些东西而且似乎都未出现.
 
声明
   变量在C(在OC)中的声明
 
    声明的两个规则:
         1.说明变量的类型(编译器期望在内存当中找到)
         2.在合适的范围内起变量名
 
    让我们开始最简单的声明:
                                     int  a;
 
   这看起来像你曾经写过的第一行C代码.          
   int是一个基本类型,a是一个变量名或者标识符。
 
   为了阅读一个声明,你会从标识符开始,然后往右边一直读直到你不能然后开始往变量的左边。(我们会在下个部分来解释)
   在我们变量的右边没有任何东西所以我们可以直接了当的说:a 是一个int
 
    一个声明可以有一个基本类型并且在说明符的最左边。
 
    说明符可以被基本类型在创建派生类的时候用修饰符修改。以下是4个修饰符(3个来自于ANSI-C还有一个来自于Apple’s proposed extensionANSI-CANSI-C),它们分别是*,[],(), and ^.
   
 3种ANSI-C修饰符
    指针修饰符*
                                       int *a;
   基本类型一直是int且变量名为a。但是指针的修饰符 * 告诉我们它是一个指向int类型的int类型的指针。
     修饰符*总是在变量的左边。
 
    数组修饰符[ ]
                                       int a[ ];
    这里我们看出数组修饰符[ ] 它是一个int类型的数组用于替代简单的int.这可以在数组的维数完成例如int[10]。
     [ ]修饰符总是在修改变量的右侧。
 
     方法修饰符( )
                                       int f( );
     方法修饰符( )是在告诉我们f是一个返回值为int类型的方法。这个修饰符也能指定参数举个例子int f(long)。是一个参数为一个长整型的且返回值为int类型的。
       ( )修饰符总是在修改变量的右侧。
 
     组合修饰符
     1.指针和数组
      
      修饰符能被组合在一起去创造一个复合的变量类型。类似的如数学运算的优先级一样排列。
[ ]和( )的优先级高于*(和^)。自从两个高优先级的修饰符被写在变量的右侧之后,当我们读混合的声明时,总是从标识符和直接尽可能长时间然后离开当你到达说明符结束或关闭括号。
                                                  int *a[ ]
 
      或者你能写上小括号以提高可靠性。
                                                  int *(a[ ])
 
    但是你也许会问,如果我想要一个指向整型数组的指针该怎么办?最好是让*的优先级低于[ ]的优先级,用括号去破坏原有的优先级。
    这里,a就是一个指向int类型的数组的指针了。
 
       2.数组和方法
     你不能有一个带方法的数组且方法不能返回一个数组或者方法。一个方法能将数组做为参数。
                                                   int f(int [10]);
    这里f是一个用一个带有10个元素的整型数组作为参数且返回值是一个整型的方法。
     
      3.指针和方法
                                                   int * f( );
                                                   int *( f( ) );
    上述两种情况都是一个返回Int类型的指针的方法。
    那如果你想要一个返回方法的指针该如何做?对,没错,答案是括号!
                                                   int (*f) ( );
    这里f就是一个返回方法的int类型的指针。 

从C到OCblocks语法的声明的更多相关文章

  1. JSP JSP工作原理 JSP语法 JSP声明 JSP注释 JSP指令 jsp九大隐式/内置对象

    1 什么是JSP   1)为什么说,Servlet是一个动态Web开发技术呢?     Servlet是基于服务端的一种动态交互技术,     HttpServletRequest表示客户端到服务端的 ...

  2. javascript语法之声明变量

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. 理解C语言中指针的声明以及复杂声明的语法

    昨天刚把<C程序设计语言>中"指针与数组"章节读完,最终把心中的疑惑彻底解开了.如今记录下我对指针声明的理解.顺便说下怎样在C语言中创建复杂声明以及读懂复杂声明. 本文 ...

  4. [C#] 回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性

    回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性 序 目前最新的版本是 C# 7.0,VS 的最新版本为 Visual Studio 2017 RC,两者都尚未进入正式阶段.C# 6.0 ...

  5. JSX语法简介

    React的核心机制之一就是可以在内存中创建虚拟的DOM元素.React利用虚拟DOM来减少对实际DOM的操作从而提升性能. JSX简介 JSX就是Javascript和XML结合的一种格式.Reac ...

  6. Objective-C 语法之 static 关键字

    转:http://www.apkbus.com/android-593-1.html 学习过Java 或者 C 语言的朋友应该很清楚static关键字吧?在某个类中声明一个static 静态变量, 其 ...

  7. JSP/Servlet基础语法

    相关学习资料 http://my.oschina.net/chape/blog/170247 http://docs.oracle.com/cd/E13222_01/wls/docs81/webapp ...

  8. nodejs 基本类型和语法

    写在前面 今天想要查下Node的类型什么的知识,想要总结下,在Googol上看到一个文章,但是原始的链接不在了,在快照中把这篇文章拉出来,如果原作者有问题,请联系我! 该文章都是一些JS的基础,高手自 ...

  9. [Swift2.0系列]Defer/Guard 基础语法

    1.Defer Swift2.0中加入了defer新语法声明.defer译为延缓.推迟之意.那么在Swift2.0中它将被应用于什么位置呢?比如,读取某目录下的文件内容并处理数据,你需要首先定位到文件 ...

随机推荐

  1. OC的动态继承编译机制

    [问]为什么OC不能sizeof一个对象的大小或一个类的大小?和类结构相近的结构体却能够. [再问]为什么OC不能将对象声明到静态空间,如栈中?和类结构相近的结构体却能够. [答]由于OC的动态继承编 ...

  2. linux centos下载地址

    Centos下载地址 http://r.aminglinux.com

  3. 判断一个整数是否是回文数C++实现 leetcode系列(九)

    判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向 ...

  4. luogu 2869 挑剔的美食家

    Gourmet Grazers 传送门 题目大意 约翰的奶牛对食物越来越挑剔了.现在,商店有\(M\) 份牧草可供出售,奶牛食量很大,每份牧草仅能供一头奶牛食用.第\(i\) 份牧草的价格为\(P_i ...

  5. Java Swing 托盘闪烁Demo实例

    桌面程序当中,托盘显示是一个常用的功能. C#的WinForm程序要实现托盘是挺轻松的,而Java Swing要实现这个功能虽然也不难, 但是由于Java Swing开发者或许没有C#多,所以看到很多 ...

  6. SQLServer 错误: 15404,维护计划无法执行

    错误症状: D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG下面的ERROELOG,用文本打,查看运行维维计划不成功是生成的错误日志详细信 ...

  7. Vim常用命令及配置方案

    Vim常用命令及配置方案   几句话 很久之前就接触到vim,初学那阵觉得vim很酷炫,但确实对新手不是很友好.我也就简单看了下基本操作就上手了,但又不是长期在vim下工作,这就导致了每一次重新使用v ...

  8. Unknown column 't_user.id' in 'where clause'(通过字段名删除不了数据)

    创建员工信息表t_user CREATE TABLE t_user( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(20) , passwor ...

  9. 用MyBatis进行数据库的增删改查

    前提是MyBatis环境部署好了,参考地址: https://www.cnblogs.com/package-java/p/10316536.html 为了方便演示,我提前在数据库插入了数据方便查询 ...

  10. 运维派 企业面试题6 防dos攻击

    Linux运维必会的实战编程笔试题(19题) 企业实战题6:请用至少两种方法实现! 写一个脚本解决DOS攻击生产案例 提示:根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到 ...