//
// 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;
}