- 指针运算
1)算数运算可以给指针加、减一个整数(+,+=,-,-=);递增递减(++\--)
2)*p++ :
a、取出p所指的数据,然后将p移到下一个位置
b、* 的优先级低于 ++ 的优先级
c、常用于数组类的连续空间操作,eg:遍历
- 指针比较
1)<、<=、==、>、>=、!= 都可以应用于指针
2)比较它们在内存中的地址
3)数组中的单元的地址肯定是线性递增的
- 0地址
1)指针不应该具有0值
2)0地址可以用来表示:返回的指针是无效的;指针没有被真正初始化(先初始化为0)
3)NULL是一个预定定义的符号,表示0地址,并不是所有编译器都适用
- 指针的类型
1)无论指向什么类型,所有的指针的大小都是一样的,因为都是地址
2)但是指向不同类型的指针是不能直接互相赋值的
3)这是为了避免用错指针
- 指针的类型转换
1)void* 表示不知道指向什么东西的指针,计算时与char* 相同(但不相通)
2)指针也可以转换类型
int *p = &i ; void*q = (void*)p; //我不再当你是个int了,我认为你就是个void!
3)这并没有改变p所指的变量的类型,而是让后人用不同的眼光通过p看它所指的变量
- 指针的用途
1)需要传入较大的数据时用作参数
2)传入数组后对数组做操作
3)函数返回不止一个结果,利用指针作为参数,代出结果
4)需要用函数来修改不止一个变量
5)动态申请的内存
- 动态内存分配
1)malloc
#include<stdio.h>
#include<stdlib.h>
void* malloc(size_t size);
a、向malloc申请的空间的大小是以字节为单位的
b、返回的结果是void* ,需要类型转换为自己需要的类型
(int*)malloc(n*sizeof(int))
c、如果申请失败则返回0,或者叫做NULL
2)free (malloc配套函数)
a、把申请得来的空间还给“系统”
b、申请过的空间,都要归还
c、只能还申请来的空间的首地址