一:一维数组inta[5];a:就是数组名。a做左值时表示整个数组的所有空间(10×4=40字节),又因为C语言规定数组操作时要独立单个操作,不能整体操作数组,所以a不能做左值;a做右值表示数组首元素(数组的第0个元素,也就是a[0])的首地址(首地址就是起始地址,就是4个字节中最..
分类:
编程语言 时间:
2017-05-19 22:30:17
阅读次数:
183
创建一个对象都在内存中做了什么事情? 1:先将硬盘上指定位置的Person.class文件加载进内存。 2:执行main方法时,在栈内存中开辟了main方法的空间(压栈-进栈),然后在main方法的栈区分配了一个变量p。 3:在堆内存中开辟一个实体空间,分配了一个内存首地址值。new 4:在该实体空 ...
分类:
其他好文 时间:
2017-05-15 00:36:30
阅读次数:
223
对于字符串来说,使用“==”运算符和“equals()”方法来比较,其比较方式不同。==运算符用于比较两个变量本身的值,即两个对象在内存中的首地址;equals()方法比较的是两个字符串中所包含的内容是否相同。对于非字符串类型的变量来说,==运算符和equals()方法都是用来比较所指对象在堆内存中 ...
分类:
其他好文 时间:
2017-05-12 23:58:56
阅读次数:
327
一、什么是内存对齐 (1) 原理 a) 编译器按照成员列表的顺序给每个成员分配内存. b) 当成员需要满足正确的边界对齐时,成员之间用额外字节填充. c) 结构体的首地址必须满足结构体中边界要求最为严格的数据类型所要求的地址. d) 结构体的大小为其最宽基本类型的整数倍. (2) 程序设计 1 #i ...
分类:
其他好文 时间:
2017-05-12 11:43:53
阅读次数:
233
在c语言中,指针和数组名都表示地址,但两者却有很大的不同之处,对于初学者来说一定要弄清楚两者的区别。 首先,我举个简单的例子: char *p1="hello!"; //定义字符型指针p1,并将指针p1指向字符串“hello!”的首地址。 char s[10]="hello!"; //定义数组s,并 ...
分类:
编程语言 时间:
2017-05-10 14:30:48
阅读次数:
130
程序: 执行到语句[1]时,val和p如下图,val的起始地址为0x0000,指针p指向val首地址 执行到语句[2]时,val不变,指针p作为传入参数,拷贝其值,以p_copy代替,仍指向val首地址,函数内的new_val的起始地址为0x0020 执行到语句[3]时,将p_copy更改为指向ne ...
分类:
其他好文 时间:
2017-05-08 11:17:43
阅读次数:
161
句柄的理解:(以下文章认真看!有关于MMU的知识) 简单汇总几点: 1、句柄就类似文件操作中的文件流。通过句柄能够对数据库进行操作; 2、当程序执行后。各个对象驻留在内存中,假设获得这个内存的首地址。我们也不一定能正确訪问它的值; 为什么呢? 因为linux/windows都是以虚拟内存为基础的,各 ...
分类:
其他好文 时间:
2017-05-03 17:16:56
阅读次数:
96
计算机读取或者写入存储器地址时,一般以字(因系统而异,32位系统为4个字节)大小(N)的块来执行操作。数据对齐就是将数据存储区的首地址对齐字大小(N)的某个整数倍地址。为了对齐数据,有时需要在物理上相邻的两个数据之间保留或者插入一些无意义的字节。内存对齐本事编译器考虑是事情,但在C、C++语言中,可... ...
分类:
编程语言 时间:
2017-04-29 16:14:33
阅读次数:
175
例:修改字符串的第三个字母为a 运行,VS报下列错误: 出现这个问题的原因是,C语言规定:如果要释放内存,必须拿到内存的首地址进行释放 而p指针在释放之前,进行了移位操作,不再指向首地址,因此程序发生crash。解决办法:只需要保存首元素的地址用来释放即可。 运行结果: ...
分类:
编程语言 时间:
2017-04-25 21:22:49
阅读次数:
164
int **a = new int* [m] //分配一个指针数组,将其首地址保存在a中 、 for(int i = 0; i < m; i++) //为指针数组的每个元素分配一个数组 a[i] = new int [n]; 相当于产生了一个二维数组 a[m][n]了 静态声明的数组可以有公式(假设 ...
分类:
编程语言 时间:
2017-04-24 12:16:47
阅读次数:
173