zoukankan      html  css  js  c++  java
  • sizeof和mallo

    *p++等同于*(p++),二者均为从右向左


    NULL和'\0'对指针常量是等价的,只不过用NULL强调指针,或用#define

    这样一看才知道大家对空指针的概念如此浑浊哦!!
    首先:
    void* 这不叫空指针,这叫无确切类型指针.这个指针指向一块内存,却没有告诉程序该用何

    种方式来解释这片内存.所以这种类型的指针不能直接进行取内容的操作.必须先转成别的

    类型的指针才可以把内容解释出来.

    还有'\0',这也不是空指针所指的内容. '\0'是表示一个字符串的结尾而已,并不是NULL的

    意思.

    真正的空指针是说,这个指针没有指向一块有意义的内存,比如说:
    char* k;
    这里这个k就叫空指针.我们并未让它指向任意地点.
    又或者
    char* k = NULL;
    这里这个k也叫空指针,因为它指向NULL 也就是0,注意是整数0,不是'\0'
    一个空指针我们也无法对它进行取内容操作.
    空指针只有在真正指向了一块有意义的内存后,我们才能对它取内容.也就是说要这样
    k = "hello world!";
    这时k就不是空指针了.


    9.动态数组
    #include<stdlib.h>
    int *dynarry=(int *)malloc(10*sizeof(int));

    如果调用成功,便可dynarry[i](i从0到9)


    如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。 当内存不再使用时,

    应使用free()函数将内存块释放。 malloc的语法是:指针名=(数据类型*)malloc(长度

    ),(数据类型*)表示指针.


    动态分配数组之后,还可以改变其大小realloc
    dynarry=(int *)realloc((void *)dynarry,20*sizeof(int));
    如果能够在原地扩大区域,则返回原来的指针;如果在其他地方,返回新内存区域的地址

    ,原有指针变得不可用;否则一直找不到,返回空指针。因此,一般设置一个临时指针

    newarray,if(newarray!=NULL)  dynarray=newarray;else{fprintf(stderr,"Can't
     reallocate!\n")

    fun(int *a)
    {
    int i=sizeof(a);
    printf("%d\n",i);
    }

    C编译器把数组当做指针,所以返回值是4,不是数组的所占字节数

    判断数组定义时有几个元素
    int a[10]={13,45};
    int num=sizeof(a)/sizeof(a[0]//分母或者为sizeof(int),答案均为10

    int a[10],*p;
    p=a;
    malloc(sizeof(p))//只能分配四个字节,不是40个字节,返回的只是指针本身的大小


    char *t=malloc(strlen(s)+1);//有字符串结束标志,malloc返回分配的首地址,
    strcpy(t,s);最好乘以sizeof(char)


    用malloc申请的空间,除非程序退出,否则只能用free释放

  • 相关阅读:
    改写promise并添加超时处理
    js将文案复制到剪贴板
    学习笔记(安装、命名实体识别、BERT、面试)
    读书笔记——安装
    Markdown使用
    奔波三载,虽死犹生
    .net工程师的利器
    .NET开发相关技术
    两行代码教你用React useContext代替React-redux
    记解决 `antd is not defined` 解决ant design 打包体积过大的问题
  • 原文地址:https://www.cnblogs.com/hxsyl/p/2403347.html
Copyright © 2011-2022 走看看