0基础学习ios开发笔记第二天
- C语言的基本结构
c语言的入口函数是main函数。
main函数的返回值行业标准是int
return 数字;返回值
每条语句最后以分号结尾
注释:行注释、块注释
int main(void)
{
// line comment
/*
* block comment
* block comment
*/
} - 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 - 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变量中内存布局如下图:

未完待续……
- C语言部分语法
0基础学习ios开发笔记第二天的更多相关文章
- 0基础学习ios开发笔记第一天
Ios操作 界面操作 快捷键 command + c 复制 command+v 粘贴 command +a 全选 command +s 保存 command +z 撤销 command +x 剪切 ...
- [iOS]关于零基础学习iOS开发的学习方法总结
关于零基础学习iOS开发的学习方法总结 最近很多零基础来参加蓝鸥培训的学生经常会问到一些学习方法的问题,就如下我自己见过的好的学习方法一起讨论一下. 蓝鸥iOS开发技术的学习路线图 程序员的主要工作是 ...
- 零基础学习iOS开发
零基础学习iOS开发不管你是否涉足过IT领域,只要你对iOS开发感兴趣,都可以阅读此专题. [零基础学习iOS开发][02-C语言]11-函数的声明和定义 摘要: 在上一讲中,简单介绍了函数的定义和使 ...
- 【零基础学习iOS开发】【转载】
原文地址:http://www.cnblogs.com/mjios/archive/2013/04/24/3039357.html 本文目录 一.什么是iOS 二.主流手机操作系统 三.什么是iOS开 ...
- 李洪强iOS开发之【零基础学习iOS开发】【01-前言】01-开篇
从今天开始,我就开始更新[零基础学习iOS开发]这个专题.不管你是否涉足过IT领域,也不管你是理科生还是文科生,只要你对iOS开发感兴趣,都可以来阅读此专题.我尽量以通俗易懂的语言,让每个人都能够看懂 ...
- 【零基础学习iOS开发】【01-前言】01-开篇
本文目录 一.什么是iOS 二.主流手机操作系统 三.什么是iOS开发 四.学习iOS开发的目的 五.学习iOS开发的前提 从今天开始,我就开始更新[零基础学习iOS开发]这个专题.不管你是否涉足过I ...
- 李洪强iOS开发之【零基础学习iOS开发】【02-C语言】02-第一个C语言程序
前言 前面已经唠叨了这么多理论知识,从这讲开始,就要通过接触代码来学习C语言的语法.学习任何一门语言,首先要掌握的肯定是语法.学习C语言语法的目的:就是能够利用C语言编写程序,然后运行程序跟硬件(计算 ...
- 【零基础学习iOS开发】【01-前言】02-准备
一.程序设计语言 上一讲已经说到:要想开发一款软件,首先得学习一些对应的程序设计语言. 至于iOS开发,须要学习的语言主要有:C.C++.Objective-C. 回到顶部 二.是否须要计算机专业知识 ...
- 李洪强iOS开发之【零基础学习iOS开发】【01-前言】02-准备
在上一讲中,介绍了什么是iOS开发.说简单一点,iOS开发,就是开发运行在iPhone或者iPad上的软件.这么一说完,应该有很多人就会产生一些疑惑,比如学习iOS开发是不是一定要买iPhone?需不 ...
随机推荐
- curl 使用简介
Libcurl使用介绍: 四个关键函数: 1. curl_easy_init() 初始化curl环境,新建curl对象,返回对象句柄,使用举例: CURL *handler = cur ...
- 【JS】Beginner1:Making Stuff Happen
1.JS(JavaScript) is for interactivity 2.How does JS relate to HTML&CSS? script tag script elemen ...
- 如何在编译Xcode-Plugin工程的时候增加Cocoapods依赖
关于如何在编译Xcode-Plugin工程的时候增加Cocoapods依赖 以及在Mac App上使用Cocoapods的时候遇到Library not found for -lPods时的解决办法 ...
- Windows Azure 的磁盘管理相关概念
在 Windows Azure 的虚拟机中,磁盘有多种使用方式.操作系统磁盘是用来为虚拟机提供操作系统的虚拟硬盘.数据磁盘是附加到虚拟机上用来存储应用程序数据的 VHD. 根据应用程序的需要,可从多种 ...
- 16道嵌入式C语言面试题
预处理器(Preprocessor) 1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 ...
- 【Java基础】基本类型的包装类作为参数传递是值传递还是引用传递
突然想到这个问题,然后做了下实验,下面以Integer来讲解,其他的忽略: import java.util.Iterator; /** * Created by lili on 15/9/24. * ...
- Hadoop学习记录(4)|MapReduce原理|API操作使用
MapReduce概念 MapReduce是一种分布式计算模型,由谷歌提出,主要用于搜索领域,解决海量数据计算问题. MR由两个阶段组成:Map和Reduce,用户只需要实现map()和reduce( ...
- Linux的read命令
对于写bash脚本的朋友,read命令是不可或缺的,需要实践一下就可以了解read命令的大致用途: 编写一个脚本: #!/bin/bash # hao32 test read echo -e &quo ...
- POJ 1330 Nearest Common Ancestors(Tree)
题目:Nearest Common Ancestors 根据输入建立树,然后求2个结点的最近共同祖先. 注意几点: (1)记录每个结点的父亲,比较层级时要用: (2)记录层级: (3)记录每个结点的孩 ...
- Android多线程研究(4)——从一道面试题说起
有一道这种面试题:开启一个子线程和主线程同一时候运行,子线程输出10次后接着主线程输出100次,如此重复50次.先看以下代码: package com.maso.test; /** * * @auth ...