指针
1:指针的定义
指针变量:声明一个变量并使用地址作为该变量的值,该变量为指针变量
指针定义:类型名 *指针变量名; 例:int *p;
注意:定义多个指针变量时,每一个指针变量前都要加上*;
2:指针的作用
如果指针指向一个变量的地址,那么就可以通过访问指针来间接访问那个变量(一般地用&给出变量的地址)
例:
int *p,a=3; p=&a; printf("%d",*p)//此时输出为a的值=3
当指针指向一个变量时,对指针所指向的变量赋值,相当于给变量赋值.
例:
int *p,a=3; p=&a; printf("*p=%d a=%d\n",*p,a); *p=10; printf("*p=%d a=%d\n",*p,a);
此时的运行结果为:
这个时候就运用指针就可以将之前的swap函数实现了(因为函数中的变量为临时变量,出了函数之后就没有作用了,所以没学指针之前用swap不能将两个数的值交换)
特别的,数组是一种特别的指针,所以当我们把数组传入函数进行操作时,发现数组出了函数后会发生改变,也就是说,现在可以用指针做和数组一样的事情;
例如数组求和:
3:动态内存分配函数
函数原型:void *malloc(unsigned size)
功能:在内存的动态存储区中分配一连续空间,其长度为size,若申请成功,则返回指向所分配空间的起始地址的指针,若申请不成功,则返回NULL。使用时常把malloc()的返回值转化为特定指针类型赋给另一个指针
4:计数动态存储分配函数
函数原型:void *calloc(unsigned n,unsigned size)
功能::在内存的动态存储区中分配n个连续空间,每一存储空间的长度为size,且全部初始化为0.若申请成功,则返回一个指向被分配内存空间的起始地址的指针,若不成功,则返回NULL.
5:动态存储释放函数
函数原型:void free (void *ptr)
功能:释放由动态存储分配函数申请的整块内存空间,ptr为指向要释放空间的首地址,如果ptr的值为空指针,则free什么都不做;释放后不允许再通过该指针去访问已经释放的块.