1. C语言的基本结构

    c语言的入口函数是main函数。

    main函数的返回值行业标准是int

    return 数字;返回值

    每条语句最后以分号结尾

    注释:行注释、块注释

    int main(void)
    {
    // line comment
    /*
    * block comment
    * block comment
    */
    }
  2. C语言数据类型
    数据类型就是访问内存的方式
    在64位机器上查看如下数据类型的内存访问方式:
    int main(void)
    {
    char ci = ; // 1个字节,8位,BYTE
    char csum = ci + ; short si = ; // 2个字节,16位,WORD
    short sum = si + ; int ii = ; // 4个字节,32位,DWORD (double word)
    int isum = ii + ; long long li = ; // 8个字节,64位,QWORD (quater word)
    long long lsum = li + ;
    }

    使用命令

    objdump -d -M interl a.out

    按intel的汇编指令格式查看反汇编结果如下:

    4004ed:                           push   rbp
    4004ee: e5 mov rbp,rsp
    4004f1: c6 e2 mov BYTE PTR [rbp-0x1e],0x8
    4004f5: 0f b6 e2 movzx eax,BYTE PTR [rbp-0x1e] ; 把8位数据复制到32寄存器,位数不够的用0填充
    4004f9: c0 add eax,0x8
    4004fc: e3 mov BYTE PTR [rbp-0x1d],al ; 把eax的低8位数据复制到栈
    4004ff: c7 e4 mov WORD PTR [rbp-0x1c],0x10
    : 0f b7 e4 movzx eax,WORD PTR [rbp-0x1c] ; 把16位数据复制到32寄存器,位数不够的用0填充
    : c0 add eax,0x10
    40050c: e6 mov WORD PTR [rbp-0x1a],ax ; 把eax的低16位数据复制到栈
    : c7 e8 mov DWORD PTR [rbp-0x18],0x20
    : 8b e8 mov eax,DWORD PTR [rbp-0x18] ; 把32位数据复制到32位寄存器
    40051a: c0 add eax,0x20
    40051d: ec mov DWORD PTR [rbp-0x14],eax
    : c7 f0 mov QWORD PTR [rbp-0x10],0x40
    :
    : 8b f0 mov rax,QWORD PTR [rbp-0x10] ; 把8个字节的数据复制到rax寄存器,rax是64位寄存器
    40052c: c0 add rax,0x40
    : f8 mov QWORD PTR [rbp-0x8],rax
    : 5d pop rbp
  3. C语言指针
    写如下程序观察指针
    #include <stdio.h>
    
    int main()
    {
    int x = ;
    char y ='k';
    int *p = &x;
    printf("pointer lenth is %ld\n", sizeof(p));
    printf("*p is %d\n", *p);
    printf("p is %lx\n", p);
    printf("%p\n", &x);
    printf("%p\n", &y);
    printf("%p\n", &p);
    }

    编译程序时加上-g参数可以加入调试符号信息,同时objdump -S的时候也可以把反汇编代码和C源码对应起来
    使用命令

    objdump -d -M intel -S a.out

    查看反汇编代码部分如下:

    typedef int * int_p;
    int main()
    {
    40052d: push rbp
    40052e: e5 mov rbp,rsp
    : ec sub rsp,0x10
    int x = ;
    : c7 f4 mov DWORD PTR [rbp-0xc],0x101 ; 4字节大小的数据会对齐到能整除4的内存地址上
    char y ='k';
    40053c: c6 f3 6b mov BYTE PTR [rbp-0xd],0x6b ; char为1字节,所以没有对齐的要求
    int *p = &x;
    : 8d f4 lea rax,[rbp-0xc] ; 将x的地址放到rax寄存器
    : f8 mov QWORD PTR [rbp-0x8],rax ; 再放到p变量中

    内存布局如下图:

    未完待续……

  4. C语言部分语法

0基础学习ios开发笔记第二天的更多相关文章

  1. 0基础学习ios开发笔记第一天

    Ios操作 界面操作 快捷键 command + c 复制 command+v 粘贴 command +a 全选 command +s 保存 command +z 撤销 command +x  剪切 ...

  2. [iOS]关于零基础学习iOS开发的学习方法总结

    关于零基础学习iOS开发的学习方法总结 最近很多零基础来参加蓝鸥培训的学生经常会问到一些学习方法的问题,就如下我自己见过的好的学习方法一起讨论一下. 蓝鸥iOS开发技术的学习路线图 程序员的主要工作是 ...

  3. 零基础学习iOS开发

    零基础学习iOS开发不管你是否涉足过IT领域,只要你对iOS开发感兴趣,都可以阅读此专题. [零基础学习iOS开发][02-C语言]11-函数的声明和定义 摘要: 在上一讲中,简单介绍了函数的定义和使 ...

  4. 【零基础学习iOS开发】【转载】

    原文地址:http://www.cnblogs.com/mjios/archive/2013/04/24/3039357.html 本文目录 一.什么是iOS 二.主流手机操作系统 三.什么是iOS开 ...

  5. 李洪强iOS开发之【零基础学习iOS开发】【01-前言】01-开篇

    从今天开始,我就开始更新[零基础学习iOS开发]这个专题.不管你是否涉足过IT领域,也不管你是理科生还是文科生,只要你对iOS开发感兴趣,都可以来阅读此专题.我尽量以通俗易懂的语言,让每个人都能够看懂 ...

  6. 【零基础学习iOS开发】【01-前言】01-开篇

    本文目录 一.什么是iOS 二.主流手机操作系统 三.什么是iOS开发 四.学习iOS开发的目的 五.学习iOS开发的前提 从今天开始,我就开始更新[零基础学习iOS开发]这个专题.不管你是否涉足过I ...

  7. 李洪强iOS开发之【零基础学习iOS开发】【02-C语言】02-第一个C语言程序

    前言 前面已经唠叨了这么多理论知识,从这讲开始,就要通过接触代码来学习C语言的语法.学习任何一门语言,首先要掌握的肯定是语法.学习C语言语法的目的:就是能够利用C语言编写程序,然后运行程序跟硬件(计算 ...

  8. 【零基础学习iOS开发】【01-前言】02-准备

    一.程序设计语言 上一讲已经说到:要想开发一款软件,首先得学习一些对应的程序设计语言. 至于iOS开发,须要学习的语言主要有:C.C++.Objective-C. 回到顶部 二.是否须要计算机专业知识 ...

  9. 李洪强iOS开发之【零基础学习iOS开发】【01-前言】02-准备

    在上一讲中,介绍了什么是iOS开发.说简单一点,iOS开发,就是开发运行在iPhone或者iPad上的软件.这么一说完,应该有很多人就会产生一些疑惑,比如学习iOS开发是不是一定要买iPhone?需不 ...

随机推荐

  1. 一些有用的Azure工具

    目前,Azure 没有为客户提供监控和管理托管服务的完整解决方案.为了获取网络信息,speedtest.net 提供了一种工具,用于测量响应时间.带宽和整体连接质量.可以使用 Matthew Roso ...

  2. extjs Cannot read property 'dom' of null

    如果你的EXTJS报错: Cannot read property 'dom' of null,那就有可能是因为你的HTML或者JSP文件中的BODY标签里面少了个东西比如代码是: <html& ...

  3. repeater中后台动态为控件添加属性

    在此贴出repeater中的ItemDataBound事件中的代码: private void ItemDataBound(object sender, RepeaterItemEventArgs e ...

  4. CF_402B 想法题

    题目链接:http://codeforces.com/problemset/problem/402/B /**算法分析: 题意太大意,positive没注意这个问题 考察等差数列,由An=A1+(n- ...

  5. hdu 1754 I Hate It (splay tree伸展树)

    hdu 1754 I Hate It 其实我只是来存一下我的splay模板的..请大牛们多多指教 #include<stdio.h> #include<string.h> #i ...

  6. Ubuntu16.04编译安装php

    #Ubuntu16.04编译安装php Ubuntu16.04上面搭建基于Nginx的php服务.Nginx使用apt直接安装的. sudo apt install nginx php的安装部署步骤主 ...

  7. 数据库数据导入导出系列之五 C#实现动态生成Word(转)

    1. 一个控制台例子,实现动态生成Word. 首先,添加引用:COM->Microsoft Word 11.0 Object Library. 2. 介绍几篇牛人写的关于操作Word的文章 [分 ...

  8. 跟我学SpringMVC目录汇总贴、PDF下载、源码下载

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  9. 如何用Java进行3DES加密解

    原文地址: http://weavesky.com/2008/01/05/java-3des/ 最近一个合作商提出使用3DES交换数据,本来他们有现成的代码,可惜只有.net版本,我们的服务器都是Li ...

  10. 2假动作,数据缓冲,CCEaseExponential,CCEaseElastic,CCEaseBounce,CCCallFunc,funcNCallBack,funcNDCallBack,funcO

     1 缓冲动作 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/4 ...