当前位置 博文首页 > 不负时光可怜人:【翁恺C语言进阶】指针与字符串:2指针运算

    不负时光可怜人:【翁恺C语言进阶】指针与字符串:2指针运算

    作者:[db:作者] 时间:2021-06-27 12:11

    所有笔记省略了我认为在基础阶段必须掌握的内容,诸如部分的名词、符号定义以及用法,标题带有*号为个人认为重点内容。

    2.1 指针运算

    重点理解指针之间的加减运算。

    1. *p++如何理解

      取出p所指的数据,之后将p移到下一个位置;至于为什么不需要加括号,是由于++优先级高与*的优先级。

    2. 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得到多少内存,这个值是会变化的,并不固定。
    在这里插入图片描述