开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第26天,点击查看活动详情
指针比较
<,<=,==,>,>=,!=都可以对指针做;
比较它们在内存中的地址;
数组中的单元的地址肯定是线性递增的。
0地址
内存中是存在0地址的,但是0地址通常是那个不能随便碰的地;
所以指针不应该具有0值;
因此可以用0地址来表示特殊的事情:
返回的指针是无效的,指针没有被真正的初始化(在程序中定义指针可以先将其初始化为0);
NULL是一个预定定义的符号,表示0地址(有点编译器不愿意你用0来表示0地址)。
指针的类型
无论指向什么类型,所有指针的大小都是一样的,因为都是地址;
但是指向不同类型的指针是无法直接相互赋值的;
这是为了避免用错指针。
指针的类型转换(初学者不建议轻易尝试)
void表示不知道指向什么东西的指针,计算时与char相同,但不相通;(void主要用在底层程序和系统程序中,直接访问某个内存地址)
指针也可以类型转换:int *p=&i;void *q=(void *)p;
这并没有改变p所指的变量的类型,而是让别人用不同的眼光通过p看它所指的变量(从q的角度出发了,不再将i当作int,而是看作void)。
用指针来做什么
需要传入较大的数据时用作参数;
传入数组后对数组做操作;
函数不止返回一个结果;
需要用函数来修改不止一个变量;
动态申请的内存。
动态内存分配
输入数据
如果输入数据时,先告诉你个数,然后再输入,要记录每个数据。
C99可以用变量来做数组定义的大小,那在这之前呢?
需要动态分配内存:int a=(int)malloc(n*sizeof(int));
要用到malloc需要头文件:#include<stdlib.h>。