1、当一个程序另外需要一些内存时,它就调用malloc()函数,malloc从内存池中提取一块合适的内存,并向该程序返回一个指向这块内存的指针。这块内存此时并没有以任何方式进行初始化。(是指针指向的内存没有初始化,不是指针没有初始化。)
2、当一块以前分配的内存不再使用时,调用free函数把它归还给内存池以供以后之需。
3、malloc所分配的是一块连续的内存。
4、对每个从malloc返回的指针都进行检查,确保它并非NULL是非常重要的!!!!!
5、malloc与calloc之间的主要区别是后者在返回指向内存的指针之前把内存初始化为0(对于指针是NULL)。
2)关于指针的笔记:
1、所有的基本数据类型最终都被解释成一串二进制码,也就是说,当给定一串二进制码时,它可能被映射成int,也可能被映射成char,float,double等数据类型。
2、声明一个指针后,操作系统并不会为它分配空间。所以在访问指针前必须初始化。
3、如果知道指针被初始化为什么地址,就把它初始化为该地址,否则就把它初始化为NULL。风格良好的程序会在指针解引用之前对它进行检查,这种初始化策略可以减少大量的调试时间。
4、左值表示存储在计算机内存的对象,左值相当于地址值。右值:当一个符号或者常量放在操作符右边的时候,计算机就读取他们的“右值”,也就是其代表的真实值,右值相当于数据值。
5、&a只能做右值。
6、定义char *string;则表达式 *string++ 执行过程:(1)++操作符产生string的一份拷贝(2)然后++操作符增加string的值(3)最后在string拷贝上执行间接访问操作。
这个表达式经常用在循环中 !note:++操作符优先级高于*
7、指针数组以一个NULL指针结束。
**8、**p为一个指针,p+1 (指针与整数加法)的结果与类型无关。若p为int,则p增加一个int即四个字节,若p为char,则p增加一个char即一个字节
3)throw:
如果出现了异常情况,我们可以把该异常抛出,这个时候的抛出的应该是异常的对象。
throws和throw的区别(面试题)
throws
用在方法声明后面,跟的是异常类名
可以跟多个异常类名,用逗号隔开
表示抛出异常,由该方法的调用者来处理
throws表示出现异常的一种可能性,并不一定会发生这些异常
throw
用在方法体内,跟的是异常对象名
只能抛出一个异常对象名
表示抛出异常,由方法体内的语句处理
throw则是抛出了异常,执行throw则一定抛出了某种异常
源代码:
- public class Throws_Throw {
- public static void main(String[] args) {
- // method();//调用此方法没必要try-catch因为抛得是运行时期的异常
- try {
- method2();//调用此方法必须要try-catch因为抛得的编译器
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public static void method() {
- int a = 10;
- int b = 0;
- if (b == 0) {
- throw new ArithmeticException();
- } else {
- System.out.println(a / b);
- }
- }
- public static void method2() throws Exception {
- int a = 10;
- int b = 0;
- if (b == 0) {
- throw new Exception();
- } else {
- System.out.println(a / b);
- }
- }
- }