// main.m
// 1-27随堂笔记
//讲师: 小辉
//笔者: 王学文
// Created by lanouhn on 15/1/27.
// Copyright (c) 2015年 lanouhn. All rights reserved.
//动态内存分配(DynamicMerry)
#import <Foundation/Foundation.h>
void test() {
int x = 10;
int y = 20;
}
//函数返回栈区的数据,是不安全的;一in为展区的数据随着函数执行结束,也会由系统自动回收回去,不能够办证一直能够使用
int comeBack() {
int x = 0;
return x;
}
int mac = 1020;//全局变量
int main(int argc, const char * argv[]) {
/*
//内存区域划分(地址由高到低)
//1. 栈区
//2. 堆区
//3. 静态区(全局区)
//4. 常量区
//5. 代码区
//栈区:
//函数中定义的局部变量由系统在栈区分配内存
//开发人员不用关心系统如何分配内存,完全由系统分配和释放内存
int a =10;
printf("%pn", &a);
//栈区内的数据以栈的形式存储
//栈的特点: 先进后出
int b = 15;
test();
int x = comeBack();
//静态全局区
//全局变量和用static修饰的变量都由系统的静态全局区存放
//静态全局区的所分配的内存,直到程序结束才能被释放
printf("%pn", &mac);
//用static修饰的变量
//1. 存放在静态全局区
//2. 只能被初始化一次
//3.如果没有赋初值, 默认为0
static int apple = 123;
printf("%pn", &apple);
for (int i = 0; i < 5; i++) {
static int n = 0;//只能被初始化一次,默认初值是0;
printf("%dn", n);
n++;
}
//常量区
//1. 常量('a', 123, 34.5, "iphone")都被存到常量区
//常量区由系统管理
char *p = "IOS";
printf("%pn", p);
//常量区的数据,只能够读,不能修改
printf("%cn", *p);
// *p = 'a';//error
//代码区
//程序中的函数和语句会被编译成CPU指令存在代码区
//代码区有系统控制
//堆区
//有开发人员手动申请,手动控制
//申请内存函数
//void *malloc(<#size_t#>)
//返回值类型: void * (泛类型), 泛型指针可以装换成任意一种指针类型
//函数名: malloc
//参数类型: size_t, unsigned int
//参数含义: 多少个字节
int *p1 = malloc(4);
printf("%pn", p1);
*p1 = 10;
char *p2 = malloc(7);
strcpy(p2, "iphone");
printf("%sn", p2);
*p2 = 66;
printf("%sn", p2);
p2[3] = '