c语言 指针
最近看c语言,把以前不怎么懂的指针做个笔记:
声明指针:
int *pointer = NULL;
未初始化的指针是非常危险的,所以应总是在声明指针时初始化。
对已声明的变量地址初始化,使用& ,如
int number = 10;
int *pointer = &number;
注意:number的声明必须在pointer的声明之前。
通过指针访问值:
假设声明以下变量:
int number=15;
int *pointer = &number;
int result=0;
pointer变量含有number变量的地址,所以可以用下方法计算新的汇总值:
result=*pointer+5;
使用指针:
pointer=# //使用寻址运算符获取num的地址,并将它保存在pointer中。
++*pointer递增pointer的值,但如果使用后置形式,必须写成(*pointer)++,括号指定要递增的是数值,不是地址。
可以用scanf("%d",pointer);输入数值。
指向常量的指针:
声明指针时,可以使用const关键字,该指针指向的值不能改变。
long value=9999L;
const long *pvalue=&value;
pvalue指向的值不能改变,但可以对value进行任意操作。
value=7777L;
改变了pvalue指向的值,但不能使用pvalue指针做这个变量。指针本身不是常量,所以仍可以改变它指向的值:
long number=8888L;
pvalue=&number;
这会改变指向number的pvalue中的地址,仍不能使用指针改变它指向的值。可以改变指针中储存的地址,但不允许使用指针改变它指向的值。
常量指针
int count=43;
int *const pcount = &count;
第二条语句声明并初始化了pcount,指定该指针储存的地址不能改变。
但使用pcount,仍可以改变pcount指向的值:
*pcount=345;
可以创建一个常量指针,它指向一个常量值:
int item=25;
const int *count pitem=&item;
pitem是一个指向常量变量的变量指针,所以所有的信息都是固定不变的。
分配内存:
malloc()函数 需要在程序中包含头文件<stdlib.h>
例如给75个int类型的数据项分配内存,可以使用以下语句:
pNumber=(int *) malloc(75*sizeof(int));
calloc()函数 在<stdlib.h>声明的calloc()函数于malloc()函数相比有两个优点:第一,它把内存分配给指定大小的数组;第二,它初始化了所配置的内存,所有的位都是0。
使用calloc()为包含75个int元素的数组分配内存:
pNumber = (int *)calloc(75, sizeof(int));
如果不能分配所请求的内存,返回值就是NULL,也可以检查内存的结果,这非常类似malloc,但calloc分配的内存区域都会初始化为0。
释放动态分配的内存:
free(pNumber);