指针和数组
-
一维数组名:
- 一维数组名是个指针常量,它存放的是一维数组第一个元素的地址。
- int a[4],那么 a[3] 等价于 * (a+3),指向第四个元素。
- 确定一维数组需要几个参数
-
如果一个函数要处理一个一维数组需要两个参数:
- 数组第一个元素的地址
- 数组的长度
-
指针变量的运算
- 指针变量不能相加 不能相乘 也不能相除
- 如果两个指针变量指向的是同一块连续空间中的不同存储单元,则这两个指针变量才可以相减。
-
一个指针变量到底占几个字节
- sizeof(数据类型/变量名),功能:返回值就是该 数据类型/变量名 所占的字节数。
- 假设p指向char类型变量(1个字节)
- 假设q指向int类型变量(4个字节)
- 假设r指向double类型变量(8个字节)
- p q r 本身所占的字节数是否一样? 答案:p q r 本身所占的字节数是一样的
- 总结:一个指针变量,无论它指向的变量占几个字节,该指针变量本身只占四个字节。一个变量的地址使用该变量首字节的地址来表示。
动态内存分配
-
传统数组的缺点:
- 数组长度必须事先制定,且只能是常整数,不能是变量。
- 传统形式定义的数组,该数组的内存程序员无法手动释放。数组一旦定义,系统为该数组分配的存储空间就会一直存在,直到该函数运行完毕时,数组的空间才会被系统释放。
- 数组的长度一旦定义,其长度就不能再更改,即数组的长度不能在函数运行的过程中动态的扩充或缩小。
- A函数定义的数组,在A函数运行期间可以被其它函数使用,但A函数运行完毕之后,A函数中的数组将无法再被其它函数使用。 即传统方式定义的数组不能跨函数使用
-
动态内存和静态内存的比较
- 静态内存是由系统自动分配,由系统自动分配,由系统自动释放。
- 静态内存是在栈分配的。
- 静态内存不可以跨函数使用后。
- 动态内存是由程序员手动分配,手动释放。
- 动态内存是在堆分配的。
- 动态内存可以跨函数使用。
结构体
-
什么叫结构体
- 把一些基本类型数据组合在一起形成的一个新的复合数据类型。
-
如何定义结构体
这是定义了一个数据类型,并没有定义变量。
-
怎样使用结构体变量
-
赋值和初始化
-
如何取出结构体变量中的每一个成员
-
结构体变量的运算:结构体变量不能相加,不能相减,也不能相互乘除,但结构体变量可以相互赋值。 例如: