指针

    xiaoxiao2023-03-24  4

    一:野指针:

    char *ptr

    定一个指针,没有赋值,用NULL

    char *ptr = NULL 即表示指向空,不能再做赋值,不能对0地址操作访问。

     

    //#define NULL void *o

    如果出现段错误,看看对NULL有没有赋值。

     

    如何避免野指针而不是杜绝:

    1.如果没有对指针进行赋值,可把指针指向空,可避免野指针

    2.如果出现段错误,可查看有没有对NULL进行赋值

    3.当你要把指针指向的空间赋值时,应先分配一下空间

     

    char *ptr=hello world

    *ptr=L

    不对,会出现段错误,ptr是个常量,没有办法赋值。

     

    ptr=char *malloc100*sizeofchar);蓝色部分是为了增加可移植性

    指针必须是相同类型赋值,如果不是相同类型1.会越界2.取数据不完整

     

    void*:称为万能指针

    缺点:不能作取值操作

     

     

     

    二:获取字符串的两种方法。以及malloccallocralloc的使用注意点

    获取字符串两种方法

    1.char ptr[100];

      1#include<stdio.h>

      2 #include<stdlib.h>

      3 #define MAX_SIZE 1024

      4 int main()

      5 {

      6     char *ptr=(char *)malloc(MAX_SIZE*sizeof(char));   malloc分配内存空间。

      7     if(NULL==ptr)

      8     {

      9         printf("malloc error!\n");         看内存是否分配成功。

     10         exit(1);

     11     }

     12         //memset(ptr,'\0',sizeof(ptr));     其中‘\0’是表示拿0来填充这100个字节。

     13         memset(ptr,'\0',sizeof(char)*MAX_SIZE);    指把空间全部清空。

     14         //bzero(ptr,MAX_SIZE)

     15         scanf("%s",ptr);

     16         printf("ptr=%s\n",ptr);

    17         free(ptr);     释放空间。释放以后,ptr没值了,但是还保存了原来的地址,      如果不置为空,会变成野指针

     18         ptr=NULL;

     19         return 0;

     20 }

    malloc的头文件#include<stdlib.h>

     

    用了空间再用一次的时候一定要记得清空

     

    通常都是先分配空间,然后检验空间是否分配成功,把空间里面的残留元素都清空,然后初始化,再释放,最后再初始化。

    通常用memset来初始化一块内存。

     

     

    mallocrelloccalloc的区别。

    char *ptr=(char *)malloc(MAX_SIZE*sizeof(char));

    转载请注明原文地址: https://ju.6miu.com/read-1201972.html
    最新回复(0)