指针运算:
1.指针与整数的运算:
a.指针与整数的运算只能加减,不能乘除取余
b.指针与整数的运算得到的结果还是指针(地址)
公式: 指针 + n = 指针 + n * 指向的类型所占的字节数
指针 - n = 指针 - n * 指向的类型所占的字节数
如果有一个int类型指针p,地址为0x11,那么p + 2得到的结果0x19
作用:遍历数组
int nums[] = {10,21,13};
//正序
int *p = &nums[0];
for (int i=0; i<3; i++) {
*(p+i);
}
//逆序
p = &nums[2];
for (int i=0; i<3; i++) {
*(p-i);
}
2.指针与指针的运算:
a.指针与指针的运算只能做减法,不能加、乘、除、取余
b.指针与指针的运算得到的结果是long
c.指针与指针的减法只能是同类型之间运算
公式: 指针 - 指针 = (指针存的地址 - 指针存的地址) / 指向的类型所占的字节数
作用:算出两个元素之间相差几个位置
指针函数:
就是指针的函数,本质上是一个函数。它是一个返回值类型是指针的函数
语法: 类型* 函数名(参数列表){
函数体;
}
C语言中只能返回字符串常量、全局变量以及静态变量
函数指针:
就是函数的指针,本质上是一个指针。它是一个指向函数的指针。
函数指针可以认为就是函数名;
语法: 返回值类型 (*指针变量名)(参数列表);
赋值:
指针变量名 = 函数名;
例:
void (*pTest)();
pTest = test; //pTest是指针变量名,test是函数名,函数名就是一个地址
请注意!这里的test没有括号,如果加了括号test()就等于是执行了这个函数 而不是将该函数赋给指针变量名了。
枚举:
定义语法:
enum 枚举名{
枚举项1,
枚举项2,
…………
枚举项n
};
注意:1.枚举本质是整数
2.枚举项不能重名
3.枚举值默认从0开始,依次递增
4.枚举值可以重复,并且也可以手动改变原来的默认值,改完后它后面的也依次递增
结构体指针:
声明语法:
struct 结构体名 * 指针变量名;
赋值:
指针变量名 = &结构体变量;
例: struct Person *ppt; //结构体指针
struct Person p; //结构体变量
ppt = &p;