当前位置 博文首页 > 不负时光可怜人:【翁恺C语言进阶】指针与字符串:2指针运算
所有笔记省略了我认为在基础阶段必须掌握的内容,诸如部分的名词、符号定义以及用法,标题带有*号为个人认为重点内容。
重点理解指针之间的加减运算。
*p++如何理解
取出p所指的数据,之后将p移到下一个位置;至于为什么不需要加括号,是由于++优先级高与*的优先级。
0地址
在c语言中通过NULL这个预定义的符号表示0地址。
值得一提的是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得到多少内存,这个值是会变化的,并不固定。