int (*pf) ( int x, int y); // 定义一个函数的指针 这个函数 返回值为int 接受两个int类型的参数
四.指针使用的常见错误:
指针的常见错误一:
//指针变量的类型 要跟 存放数据的类型 必须要对应
// int类型的变量的地址 要用int*来表示.
// float类型变量的地址 要用float* 来表示.
指针的常见错误二:
int i = 5;
int* p ;
printf("*p=%d\n",*p); // 如果p变量没有进行初始化, 里面存放的是一个垃圾值 混乱值.
// *p 访问了一块不知道的内存 (野指针)
// 指针变量 未经赋值 ,不能使用.
// 如果修改一个野指针指向的内存空间,可能会出现严重的错误.
//window操作系统 提供了一些api 提升父进程的权限.
五: 指针的长度
//所有数据类型的指针长度 都是4个字节
//32位的操作系统, 要想表示一个地址 2的32次方个地址.
//指针类型的 作用主要就是在指针运算的时候 起作用. 在获取指针所指向的数据的时候 起作用.
六. 多级指针
七. 手动分配内存
栈内存会被系统自动回收,不能被手动回收
堆内存不会被系统自动回收,需要由程序员手动回收
八. 结构体,联合体和枚举,自定义类型
结构体:
struct Student //此写法为最标准写法
{
int age; // 4
float score; // 4
long id;// 4
char c; // 为了方便处理,也分配为4
//不同的编译器 处理的结果可能 不同
} ;
三种写法:
第一种
struct Student
{
int age;
float score;
char sex;
}
第二种
struct Student2
{
int age;
float score;
char sex;
} st2;
第三种
struct
{
int age;
float score;
char sex;
} st3
联合体
union {double d; long i; int k; char ii; } mix;
typeof给一个变量定义一个别名