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);

 



posted @ 2010-11-22 13:05  fangel16  阅读(154)  评论(0)    收藏  举报