黑马程序员技术交流社区

标题: 黑马程序员—c语言学习心得—指针 [打印本页]

作者: 任子杰    时间: 2015-10-31 14:22
标题: 黑马程序员—c语言学习心得—指针
黑马程序员——c语言学习心得—— 指针
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流------

一、定义指针的时候一定要初始化。
   变量定义的时候给变量初始化,这是保证不出错的一个很好的习惯。尤其是在指针的使用上,如果我们没有给指针初始化,就会出现野指针,该指针的指向并不是我们所希望的,一旦错误的释放了这个指针,就会发生内存的访问。那么如何初始化指针变量呢,一般有以下几种方法:
   1、初始化空指针
   int* pInteger=NULL;
   2、用已有的变量初始化
   int length=5;
   int* pInteger=&length;
   3、用内存分配函数给指针分配空间
   int* pInteger=(int*)malloc(10*sizeof(int));//为指针分配大小为10个整数的内存空间。
   二、正确的申请和释放内存
   指针使用之后,如果不释放指针所使用的内存,就会造成内存的泄露,这样就会有大量内存由于没能释放,别的程序不可以使用这部分内存,如果一个程序不停申请内存而不去释放内存,很快就会造成系统的崩溃。那么如何正确的申请和释放内存呢。
   1、指针初始化,上面已讲
   2、正确的申请内存
   如何申请内存才算是正确的申请内存呢?首先要判断指针是否为空,如果不为空,则释放该指针所指向的内存块,如果不释放这块内存,而直接就申请内存,就会造成内存的泄露。申请内存后,一定要判断是否申请成功。
如:int* pInteger=NULL;//指针定义处
    ...
    if(pInteger != NULL)
    {
        free(pInteger);
        pInteger=NULL;//指针释放之后并不为空,要设置其为空
    }
    pInteger=(int*)malloc(10*sizeof(int));
    if(pInteger != NULL)
    {
        printf("内存申请没有成功\n!");
        exit(0);
    }
    ...
  3、内存释放
  程序使用完了指针,一定要记得释放指针指向的内存。释放后一定要记得设置指针为空指针。因为free函数在释放指针后,只是单纯的释放了该指针指向的内存空间,而没有将指针赋为空值。所以一定要记得在释放指针后将指针赋为空值。
如:
  int* pInteger=NULL;//指针定义处
  ...
  free(pInteger);//释放指针
  pInteger=NULL; //指针赋为空值
  三、使用指针时一定要判断指针是否为空
  在使用指针时一定要判断指针是否为空,如果为空,则做相应的操作。如果不做判断,则可能错误的使用空指针。
  如:char* dest=NULL;
      ...
      strcpy(dest,"string");//如果dest为空则出错
  
  正确的使用方法为:
     if(dest == NULL)
     {
         dest=(char*)malloc(7*sizeof(char));//因为字符串以“\0”结束,
                                            //所以要申请7个字符的内存
         //判断内存申请是否成功
         ...
      }
      strcpy(dest,"string");

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流------





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2