在过去的一段时间,我开始从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. bzoj1570: [JSOI2008]Blue Mary的旅行(二分+网络流)

    1570: [JSOI2008]Blue Mary的旅行 题目:传送门 题解: get到拆点新姿势,还是做题太少了...ORZ 因为每天就只能有一个航班,那就不能直接连了,所以要拆点(然后就被卡住了) ...

  2. xBIM 基础05 3D墙案例

    系列目录    [已更新最新开发文章,点击查看详细]  使用编码的形式去生成一堵墙的模型需要做很多的工作. using System; using System.Collections.Generic ...

  3. 机器学习(十一) 支持向量机 SVM(下)

    支持向量机通过某非线性变换 φ( x) ,将输入空间映射到高维特征空间.特征空间的维数可能非常高.如果支持向量机的求解只用到内积运算,而在低维输入空间又存在某个函数 K(x, x′) ,它恰好等于在高 ...

  4. 【原创】ApacheTomcat集群在Linux下的搭建步骤

    在RedHat5(以下简称RH)上搭建ApacheTomcat的集群环境,有以下步骤: 1.首先安装apr和apr-util apr-util需要依赖于apr包,所以先安装apr, http://fi ...

  5. 《Unix环境高级编程》读书笔记 第8章-进程控制

    1. 进程标识 进程ID标识符是唯一.可复用的.大多数Unix系统实现延迟复用算法,使得赋予新建进程的ID不同于最近终止所使用的ID ID为0的进程通常是调度进程,也常被称为交换进程.它是内核的一部分 ...

  6. tomcat更改日志路径

    共有2个地方需要更改. 1.   tomcat/conf/logging.properties 步骤1--查找:grep logs logging.properties 步骤2--替换:sed -i ...

  7. 修改maven打包名字

    仅需在pom.xml添加下列配置 build> <finalName>userapi</finalName> </build>

  8. vue列表数据倒计时存在的一些坑

    vue 列表数据倒计时,在页面销毁前需要清除定时器,否着会报错. export default { data() { return { list: [] } }, mounted() { for (l ...

  9. IIFE 萌新学习笔记

    立即执行函数表达式(IIFE) IIFE:Immediately-Invoked Function Expression(立即执行函数表达式) 一 常用写法: //经常使用的写法(function() ...

  10. oracle数据库回滚

    线下测试数据误操作,回滚攻略--把数据捞出来,这个时间自己设置--表名一定要是:xx_tbd日期 CREATE TABLE user_tbd0718ASselect * from user as of ...