iOS学习笔记---c语言第十天
动态内存分配
一、存储区划分
从低到高(内存地址小----内存地址大) : 代码区---常量区---静态区---堆区---栈区
栈内存
//凡是在函数体内定义的变量 都存储在栈区(包括形参)。
int a = ;//a也是在栈区域里面
float b = 1.5;//b也是在栈区域里面
char c = 'b';
double d = 3.14;
printf("%p %p %p %p\n",&a,&b,&c,&d);
//栈的特点先进后出,先定义的变量先入栈,后定义的变量后入栈。
//调用函数时。函数中得变量会陆续入栈,函数调用结束时,变量陆续出栈
//栈区内存的分配与回收,有系统自动进行。
常量区
‘a’字符常量 5整型常量 “iphone” 字符串常量
常量占用内存 只读状态 不能修改
静态存储区
static int a = 5;
1.只初始化一次 2.如果初始没给值,默认为0 3.只有程序退出才释放(永远存在)
将变量定义的类型前加static 则该变量存储在静态存储区
//编译期就已经进入内存,程序运行期间h一直存在,不会被销毁 ,程序结束时h才会被销毁,如果没有给h赋值,h默认初始值为0
static int h = ;
#import <Foundation/Foundation.h> int m = ;
//定义在函数外面的变量称为全局变量,全局变量跟静态变量一样,存储在全局区(也叫静态区)
int main(int argc, const char * argv[])
{
二、堆内存分配函数
堆内存 一般由程序员分配和释放
malloc: void *malloc(unsigned int size);//void * 表示任意类型的指针
int * p = (int *)malloc(sizeof(int) * n);//(int *)强转类型 sizeof(int)分配的内存大小 *n元素个数
char *str = malloc(8);
//malloc主要功能是从 堆区 开辟 指定大小 得内存空间
//内存大小以 字节 为单位
//返回值是这段空间的首位置
//我们需要定义一个指针保存返回值
int *p = malloc();
//p在栈区。malloc操作的十堆区,p存的地址是堆区地址
int a = ;
int *q = &a;
//a在栈区,q也在栈区,q存的a的地址,也就是栈区地址
strcpy(str, ”iPhone”);
free(str);//标记删除,不清除内容
struct student{
char name[];
int age;
int num;
char sex;
};
typedef struct student Student;
Student *pstu = malloc(sizeof(Student)*);
pstu->age = ;
free(pstu);//释放内存,160个字节归还给系统
Student *p = malloc(sizeof(Student));//分配的内存大小要用 sizeof(Student)
void * calloc(unsigned n,unsigned size);//n内存个数 size大小 calloc 清空内存
//分配n个size大小的空间,并且把该内存上的所有字节清零
void *realloc(void *p,unsigned newSize);//按新的长度重新分配
void *memset(void *s , int c , size_t n);//memset(p , 0 , sizeof(int) * 5) 通常用于清除结构体或者数组数据
//输入三个学员的姓名,动态分配内存保存学院姓名,并最后输出
//定义一个包含3个字符指针的数组,他们默认指向null(0)
char *names[]={};
//定义一个临时数组,用于存放输入的单个单词
char temp[] = {};
for (int i = ; i<; i++) {
scanf("%s",temp);//temp前面不要加&,因为数组名本身就是地址
//获取单个单词的长度
unsigned long length = strlen(temp);
//让指针指向开辟的堆空间
names[i] = malloc(length+);
//将输入的内容拷贝到堆空间里
strcpy(names[i], temp);
}
for (int i = ; i<; i++) {
printf("%lu %s\n",strlen(names[i]),names[i]);
free(names[i]);
}
void *memcpy(void *dest,const void *source,size_t n)
iOS学习笔记---c语言第十天的更多相关文章
- iOS学习笔记---oc语言第十天
内存管理高级 一 属性的内部实现原理 assign retain copy assign 下的属性内部实现 setter方法 @property(nonatomic,assign)NSS ...
- IOS学习笔记07---C语言函数-printf函数
IOS学习笔记07---C语言函数-printf函数 0 7.C语言5-printf函数 ------------------------- ----------------------------- ...
- IOS学习笔记06---C语言函数
IOS学习笔记06---C语言函数 -------------------------------------------- qq交流群:创梦技术交流群:251572072 ...
- iOS学习笔记---oc语言第一天
第一讲 初始类和对象 c语言的超集,允许在oc中使用c语言源代码.编译器兼容c语言程序 具备完善的面向对象特性 包含一个运行时系统 类库丰富 面向对象编程 oop 面向对象语言:c++ java ...
- iOS学习笔记---c语言第八天
指针 首先将变量a的地址存放在另一个变量中,比如存放在变量b中,然后通过变量b来间接引用变量a,间接读写变量a的值.用来存放变量地址的变量,就称为"指针变量" int *p=nul ...
- iOS学习笔记---oc语言第九天
初级内存管理 iOS应用程序出现crash(闪退),90%以上是内存问题////其他:数组越界,方法只声明没实现 内存问题体现在两个方面:内存溢出\野指针异常 内存溢出:程序运行超出内存上限 野指针异 ...
- iOS学习笔记---oc语言第六天
Block .数组高级 block本质上就是匿名函数(没有名称的函数) block语法和函数指针很相似 回顾函数 函数:C语⾔中,实现某一类功能的代码段. 完整的函数包含两部分:函数声明.函数定义 函 ...
- iOS学习笔记---oc语言第五天
字典,数组 ,集排序 一.字典类 存储以下数据 name:张三; sex:男;age:18 film:风暴; playcount:10000次;price:60元 字典类用于保存具有映射关系(key- ...
- iOS学习笔记---oc语言第四天
字符串 数组 一.使用苹果帮助文档 学会使⽤用苹果帮助⽂文档是开发者的⼀一项技能 Inherits from 继承⾃自 Conforms to 遵循什么协议 Framework 属于哪个框架 Avai ...
随机推荐
- [Js]滑动门效果
描述:鼠标移动到一副图片上,会显示该副图片的全貌,而其他图片会显示概貌 一.没有动画效果的运动 思路: 1.定好每张图片的初始位置(第一张完全显示,234只露出一部分) 2.计算每道门的移动距离(即未 ...
- u-boot 之配置分析 (2)
Makefile简要分析所有这些目录的编译连接都是由顶层目录的makefile来确定的. 1.在makefile中有: unconfig: @rm -f $(obj)include/config.h ...
- 8种主要排序算法的C#实现
作者:胖鸟低飞 出处:http://www.cnblogs.com/fatbird/ 简介 排序算法是我们编程中遇到的最多的算法.目前主流的算法有8种. 平均时间复杂度从高到低依次是: 冒泡排序(o( ...
- HDU 5382 莫比乌斯反演
题目大意: 求S(n)的值 n<=1000000 这是官方题解给出的推导过程,orz,按这上面说的来写,就不难了 这里需要思考的就是G(n)这个如何利用积性函数的性质线性筛出来 作为一个质数,那 ...
- vim配置及插件安装管理(超级详细)
1 写在前面 Linux下编程一直被诟病的一点是: 没有一个好用的IDE, 但是听说Linux牛人, 黑客之类的也都不用IDE. 但是对我等从Windows平台转移过来的Coder来说, 一个好用 ...
- 启动BPM的5个步骤
在大部分业务中,我们通常认为:一个主要的业务流程管理项目从设计时间开始会比较好.我们知道很多方式来提高效率,增加生产力以及简化我们员工的工 作 - 这正是业务流程管理所做的.不幸的是,不管我们意图多好 ...
- (转)Ratchet教程:创建项目
原文:http://www.w3cplus.com/mobile/how-to-create-mobile-project-width-ratchet.html Ratchet教程:创建项目 ...
- ios工程中ARC与非ARC的混合
ARC与非ARC在一个项目中同时使用, 1,选择项目中的Targets,选中你所要操作的Target,2,选Build Phases,在其中Complie Sources中选择需要ARC的文件双击,并 ...
- 【LeetCode OJ】Palindrome Partitioning II
Problem Link: http://oj.leetcode.com/problems/palindrome-partitioning-ii/ We solve this problem by u ...
- iOS APP上线流程
前言:作为一名IOS开发者,把开发出来的App上传到App Store是必须的.下面就来详细介绍下具体流程. 1.打开苹果开发者中心:https://developer.apple.com 打开后点击 ...