在过去的一段时间,我开始从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. 怎样用批处理来执行多个exe文件

    怎样用批处理来运行多个exe文件 @echo off start *****.exe start *****.exe start *****.exe start *****.exe 接着我们就能够运行 ...

  2. [IOS]mac远程window全屏显示

    在mac自带着一个远程window的软件.这让我们远程起来很方便. 其步骤和window远程也很相似. 输入ip地址: 输入username以及password: 然后点击确定就可以. 只是.这时就出 ...

  3. 编写shell脚本获取本机的网络地址。&#160; 比方:本机的ip地址是:192.168.100.2/255.255.255.0,那么它的网络地址是&#160;192.168.100.1/255.255.255.

    ubuntu@ubuntu:~$ vim getlocalip.sh #!/bin/bash #ifconfig | grep inet | awk '$2' | awk -F : '$2' IP=` ...

  4. html页面的简单对话框(alert, confirm, prompt)

    html页面简单的三种对话框例如以下: 1.alert(),最简单的提示框: alert("你好!"); 2.confirm(),有确认和取消两个button: if(confir ...

  5. nyoj--2--括号配对问题(栈函数)

    括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100), ...

  6. jqGrid冻结列

    jqgrid冻结列 冻结列:就是横向移动表格时,让某一列保持不动 做法: 1.colModel的行要加上属性: frozen:true.注意:冻结列必须从第一列开始,包括隐藏列 2.加载jqgrid后 ...

  7. c#邮件发送服务

    邮件发送服务 项目中会遇到定时给某人发送邮件的功能要求,这里是京东的一段代码,当然也是我同事找的,我记录学习一下,以免忘记. 这是解决方案 这里主要是工具:日志工具,链接数据库工具,发送邮件工具 这里 ...

  8. size_type类型

    由string类类型和vector类类型定义的类型,用以保存任意string对象或vector对象的长度,标准库类型将size_type定义为unsigned类型 string::size_type它 ...

  9. React中的事件处理为什么要bind this?

    个人总结: 问: 请给我讲一下React中的事件处理为什么要bind this? 答: 好的,比如说我写了一个类组件,有个onClick属性 ,onClick={ this.fun },如果不bind ...

  10. HDU-2222 Keywords Search 字符串问题 AC自动机

    题目链接:https://cn.vjudge.net/problem/HDU-2222 题意 给一些关键词,和一个待查询的字符串 问这个字符串里包含多少种关键词 思路 AC自动机模版题咯 注意一般情况 ...