//
// main.m
// C9_内存管理
//
// Created by YIem on 15/11/20.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//

import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {

// 填坑:
// 1.字符串
char s1[] = "iPhone";// s1 是一个常量地址不能被++
char *s2 = "iPhone";// s2 可以++ // s2 保存在常量,本身空间在栈区

// s1++; // 错误

s2++;
s1[0] = 'a';

// s2[0] = 'a'; // 错误

printf("%p %p\n", s1, s2);
printf("%s %s\n", s1, s2);// s2打印出Phone  s1 打印aPhone
// 2. 不同分区
char *s4 = "iPhone";
// 指向指针的指针(二级指针)
char **s5 = &s4;
printf("%p %p\n", s4, &s4);

// 通过malloc开辟一段'堆'空间 返回空间首地址 使用p6变量保存起来 p6变量自身在 '栈' 中
int *p6 = malloc(4);
printf("%p %p\n", p6, &p6);

// 其他内存分配函数
// calloc 分配空间后会清空
// 参数1: 元素个数
// 参数2: 单个元素大小
int *p7 = calloc(5, sizeof(int));
free(p7);

// realloc  重新分配空间
int *p8 = malloc(10);
// 参数1: 需要重新分配内存空间首地址
// 参数2: 新的空间大小
p8 = realloc(p8, 20);
free(p8);
printf("%lu\n", sizeof(p8));










return 0;

}