对内存分配的理解 自动变量 局部变量 临时变量 外部变量 字符串长度 C语言可以看成由一些列的外部对象构成
Status ListInsert_Sq(SqList *L,int i,LElemType_Sq e) {
LElemType_Sq *newbase;
LElemType_Sq *p,*q;
if(i<0 || i>(*L).length+1)
return ERROR; // i值不合法
if((*L).length >= (*L).listsize) { //若存储空间已满,需开辟新空间
newbase = (LElemType_Sq*)realloc((*L).elem,((*L).listsize+LIST_INCREMENT)*sizeof(LElemType_Sq));
if(!newbase)
exit(OVERFLOW);
(*L).elem=newbase;
(*L).listsize+=LIST_INCREMENT;
}
q=&(*L).elem[i]; // q为插入位置
for(p=&(*L).elem[(*L).length-1]; p>=q; --p)
*(p+1)=*p; // 插入位置及之后的元素右移
*q=e; // 插入e
++(*L).length; // 表长增1
return OK;
}
void SequenceList() {
SqList L;
int i;
LElemType_Sq e;
InitList_Sq(&L);
printf("\nSequenceList\n");
//ListInsert_Sq(&L,0,0);
ListInsert_Sq(&L,1,1);
ListInsert_Sq(&L,2,4);
ListInsert_Sq(&L,3,666);
ListTraverse_Sq(L,SequenceList_PrintElem);
i=ListLength_Sq(L);
printf(",ListLength_Sq=%d",i);
}
Status ListTraverse_Sq(SqList L,void(Visit)(LElemType_Sq)) {
int i;
for(i=-2; i<=L.length; i++) {
Visit(L.elem[i]);
printf("--&(L.elem[%d])=%d--",i,&(L.elem[i]));
}
}
SequenceList
e=1650049076,&e=2293104--&(L.elem[-2])=4518744--
e=268582613,&e=2293104--&(L.elem[-1])=4518748--
e=3827376,&e=2293104--&(L.elem[0])=4518752--
e=1,&e=2293104--&(L.elem[1])=4518756--
e=4,&e=2293104--&(L.elem[2])=4518760--
e=666,&e=2293104--&(L.elem[3])=4518764--,ListLength_Sq=3
--------------------------------
Process exited after 0.01549 seconds with return value 0
请按任意键继续. . .
https://github.com/toywei/Data-Structure
字符串常量就是字符数组,字符串的内部标识使用一个空字符'\0'作为串的结尾
存储字符串的物理存储单元数比括在双引号中的字符数多1个
C语言对字符串的长度没有限制,但是程序必须在扫描完整整个字符串后才能确定字符串的长度
C has been designed to make functions efficient and easy to use; C programs generally consist of many small functions rather than a few big ones. A program may reside in one or more source files. Source files may be compiled separately and loaded together, along with previously compiled functions from libraries. We will not go into that process here, however, since the details vary from system to system.
C语言程序一般都由许多小的函数组成,而不是由少量较大的函数组成。一个程序可以保存在一个或多个源文件中。各个文件可以单独编译,并可以与库中已编译
过的函数一起加载。
The standard clarifies the rules on the scope of names; in particular, it requires that there be only one definition of each external object. Initialization is more general: automatic arrays and structures may now be initialized.
C语言可以看成由一些列的外部对象构成,这些外部对象可能是变量或函数。形容词external与internal相对的,internal用于描述定义在函数内部的函数参数及变量。
外部变量定义在函数之外,一次可以再许多函数中使用。
由于C语言不允许在一个函数中定义另外其他函数,因此函数本身是“外部”的。
默认情况下,外部变量与函数具有下列性质:通过同一个名字对象(标准中把这一性质称为外部链接)。
princf("hello, world\n"};
printf接受的是一个指向字符数组第一个字符的指针。
程序可以通过检查空字符找到字符数组的结尾。
字符串常量可以通过指向其第一个元素的指针访问。
对内存分配的理解 自动变量 局部变量 临时变量 外部变量 字符串长度 C语言可以看成由一些列的外部对象构成的更多相关文章
- 深入理解Java虚拟机二:垃圾收集与内存分配
垃圾收集:垃圾收集要完成三件事,包括哪些内存需要回收,什么时候回收及如何回收. 1.需要回收的内存判定:没有引用指向原先分配给某个对象的内存时,则该内存是需要回收的垃圾 Java垃圾收集器在对内存进行 ...
- C语言中的内存分配与释放
C语言中的内存分配与释放 对C语言一直都是抱着学习的态度,很多都不懂,今天突然被问道C语言的内存分配问题,说了一些自己知道的,但感觉回答的并不完善,所以才有这篇笔记,总结一下C语言中内存分配的主要内容 ...
- 【java虚拟机序列】java中的垃圾回收与内存分配策略
在[java虚拟机系列]java虚拟机系列之JVM总述中我们已经详细讲解过java中的内存模型,了解了关于JVM中内存管理的基本知识,接下来本博客将带领大家了解java中的垃圾回收与内存分配策略. 垃 ...
- Netty源码分析第5章(ByteBuf)---->第7节: page级别的内存分配
Netty源码分析第五章: ByteBuf 第六节: page级别的内存分配 前面小节我们剖析过命中缓存的内存分配逻辑, 前提是如果缓存中有数据, 那么缓存中没有数据, netty是如何开辟一块内存进 ...
- 浅谈JVM内存分配与垃圾回收
大家好,我是微尘,最近又去翻了周志明老师的<深入理解Java虚拟机>这本书.已经看了很多遍了,每次都感觉似乎看懂了,但没过多久就忘了.这次翻了第三章的垃圾收集器与内存分配策略,感觉有了新的 ...
- SQLite剖析之动态内存分配
SQLite通过动态内存分配来获取各种对象(例如数据库连接和SQL预处理语句)所需内存.建立数据库文件的内存Cache.保存查询结果. 1.特性 SQLite内核和它的内存分配子系统提供以下特性 ...
- Java深入 - Java 内存分配和回收机制
Java的GC机制是自动进行的,和c语言有些区别需要程序员自己保证内存的使用和回收. Java的内存分配和回收也主要在Java的堆上进行的,Java的堆中存储了大量的对象实例,所以Java的堆也叫GC ...
- Java 对象内存分配与回收
JVM内存区域模型: * 程序计数器,内存区域极小,是当前线程的字节码执行行号指示器: * 虚拟机栈.本地方法栈,即平时所说的“栈”,是虚拟机用来执行方法(包括Java.非Java方法)时,使用的临时 ...
- Java深入 - Java 内存分配和回收机制-转
Java的GC机制是自动进行的,和c语言有些区别需要程序员自己保证内存的使用和回收. Java的内存分配和回收也主要在Java的堆上进行的,Java的堆中存储了大量的对象实例,所以Java的堆也叫GC ...
随机推荐
- C#-MVC开发微信应用(5)--自动应答系统-自动回复机器人
前几篇已经介绍菜单和有回复信息操作,下面我们就结合snf微信端管理页面,看一下什么才是自动应答系统. 定制的服务 对于微信服务号来说,最主要的功能是提供更好的服务.用户更方便的操作,以及更快的反馈响应 ...
- 【Java虚拟机】浅谈Java虚拟机
跨平台 Java的一大特性是跨平台,而Java是如何做到跨平台的呢? 主要依赖Java虚拟机,具体来说,是Java虚拟机在各平台上的实现. Java虚拟机在不同的平台有不同的实现.同一份字节码,通过运 ...
- linux每日命令(33):diff命令
diff 命令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方.diff在命令行中打印每一个行的改动.最新版本的diff还支持二进制文件.diff程序的 ...
- 假设分配给命令的连接位于本地挂起事务中,ExecuteReader 要求命令拥有事务。命令的 Transaction 属性尚未初始化
{System.InvalidOperationException: 假设分配给命令的连接位于本地挂起事务中.ExecuteReader 要求命令拥有事务.命令的 Transaction 属性尚未初始 ...
- 【emWin】例程二十一:窗口对象——Edit
简介: 编辑框通常用作输入文本的主要用户界面,也可使用编辑字段以二进制.十进制或十六进制模式输入值. 触摸校准(上电可选择是否进入校准界面) 实验指导书及代码包下载: 链接:http://pan.ba ...
- 关于Unity中NGUI的3D角色血条的实现
首先要到Unity的Assets Store里面去下载一个扩展的Package叫NGUI HUD Text v1.13(81),注意如果没有安装NGUI就必须先安装NGUI插件,否则会用不了,因为HU ...
- Nginx系列二:(Nginx Rewrite 规则、Nginx 防盗链、Nginx 动静分离、Nginx+keepalived 实现高可用)
一.Nginx Rewrite 规则 1. Nginx rewrite规则 Rewrite规则含义就是某个URL重写成特定的URL(类似于Redirect),从某种意义上说为了美观或者对搜索引擎友好, ...
- IDEA的这八条配置你一定要改!
一定要改的八条军规.快捷键使用idea默认的,与其他同事保存一致 自动编译开关 忽略大小写开关 智能导包开关 悬浮提示开关 取消单行显示tabs的操作 项目文件编码 滚轴修改字体大小 设置行号显示 在 ...
- Linux系统备份与恢复
序言:前面一篇文章简单地介绍了Linux系统备份与恢复的相关概念,这里接着上一篇介绍两个常用的备份与恢复命令. 1 常见的备份命令 在介绍下面的备份恢复命令之前先简单的说明一下: 如果我们只是要实现 ...
- java-信息安全(十六)-双向认证
原文地址 http://snowolf.iteye.com/blog/510985 对于双向认证,做一个简单的描述. 服务器端下发证书,客户端接受证书.证书带有公钥信息,用于验证服务器端.对数据加密/ ...