这篇算总结+备忘吧!
缓冲区 :缓冲器为暂时置放输出或输入资料的内存。
指针:一个变量的在内存区中的地址称为指针
指针变量:专门用来存放指针的变量,称为指针变量
以上是基本概念,指针就是地址,通过地址可以找到地址对应的值
int *p; 定义指针变量
int a;
int *q = a; <==> int *q; q = &a;
(*q)++ <==> a++;
但是 *q++ 不等价于 (*q)++ 而是等价于 *(q++)
两个地址运算符
数组a[10],a为数组a的首地址
int a[10],*p=a;
a[i],p[i],*(a+i),*(p+i)表示的值相同
(p+i) == p+i*sizeof(int)
指针与二维数组
a[i]和*(a+i)无条件等价
a+i、a[i]、*(a+i)、&a[i][0]均表示第i行首地址;
&a[i][j]、 a[i]+j、*(a+i)+j都是第i行j列元素的地址;
a[i][j]、 *(a[i]+j)、*(*(a+i)+j)都是第i行j列元素的值
结构体变量的指针:结构体变量所占内存段的起始地址。
指向结构体变量的指针:存放该地址的变量叫做指向结构体变量的指针变量。
struct student{
int num;
char name[10];
};
struct student stu;
struct student *p;
p = &stu;
(*p).num等效于p–>num
结构体变量中成员的引用有三种形式:
(1) 结构体变量.成员名;
(2) (*p).成员名;
(3) p–>成员名;
typedef 是用来定义各种类型名,不能定义变量
函数的类型是由函数的返回值决定的,所以指针函数就是返回值为指针
函数指针:函数的入口地
void *fuctionname(int arg)
void (*fuctionname)(int arg) //一个已定义的函数在编译时,系统为其分配一个入口地址,并用函数名表示。通过指向函数的指针变量,也可以调用函数.指针变量: 指向函数入口地址的指针变量
堆和栈都是一种数据结构,栈是一种先进后出的数据表,具体的操作就是压栈(push)和弹栈(pop),堆就是申请空间和释放空间。
函数原型
void *malloc(unsigned int size); //size表示向系统申请的空间大小,函数调用成功返回指向void类型的指针
例如:
int *pi = NULL;
pi = (int *)malloc(3); //malloc(3)表示申请3byte的内存,将malloc(3)返回值的void * 类型强转为int * 类型
pi = (int *)malloc(sizeof(int)); //若不确定某种类型所占字节数,则使用sizeof()计算
函数原型
void * calloc(unsigned int num,unsigned int size);
例如:
int *pi = (int *)calloc(3,sizeof(int));
or
int *pi = (int *)malloc(3 * sizeof(int));
memset(pi,0,3 * sizeof(int));
函数原型
void free(void *p);
函数原型
void *realloc(void *p,unsigned int size);
数组和链表
内存结构
数组名就是指向数组第一个位置的地址
未完,想到了在写!