所有笔记省略了我认为在基础阶段必须掌握的内容,诸如部分的名词、符号定义以及用法,标题带有*号为个人认为重点内容。
2.1 指针运算
重点理解指针之间的加减运算。
- *p++如何理解
取出p所指的数据,之后将p移到下一个位置;至于为什么不需要加括号,是由于++优先级高与*的优先级。
- 0地址
在c语言中通过NULL这个预定义的符号表示0地址。
2.2 (*)动态内存分配malloc
值得一提的是C99以前是不支持动态数组定义的,那么这时我们应该如何定义一个动态数组。
#include<stdio.h> #include<stdlib.h> //使用malloc函数动态创建一个数组 int main(){ /* malloc接收一个整型参数 malloc(20)代表申请20个字节的内存空间 返回申请内存空间的首地址 */ /*申请一个4*3字节的内存,返回申请内存的首地址 但是内存有了,还要说明用什么数据类型来解析 这段内存。 (char *)malloc(20); (int *)malloc(20); (double *)malloc(16); ... */ //使用malloc函数创建一个动态数组 int i; int temp; printf("请输入数组的长度:"); scanf("%d",&i); int * p = (int *)malloc(sizeof(int)*i); //给数组赋值 for(temp=0;temp<i;temp++){ printf("p[%d]=",temp); scanf("%d",&p[temp]); } //输出数组 for(temp=0;temp<i;temp++){ printf("%d,",p[temp]); } free(p); return 0; }
值得注意的是我们在一个程序中可申请的空间是有限的,尤其是在大的程序开发中。因此,必须合理使用malloc函数时得合理利用free()函数对空间进行释放。
下面这个小程序就是通过循环来发现自己的计算机可以通过malloc得到多少内存,这个值是会变化的,并不固定。