zoukankan      html  css  js  c++  java
  • C语言基础知识

    1. C语言中无符号数与有符号数

    unsigned int a = 6;
    int b = -20;
    printf("a+b = %d
    ",a+b);            #输出-14
    printf("a+b %s 
    ",(a+b)>0 ? "> 0":" < 0");    #输出a+b > 0

    有符号数和无符号数在进行比较运算时(==,>=,<=,>,<),有符号数隐式的转换成无符号数。上述中,a+b的值为-14(1111_1111_1111_0010),但是a+b 比较时,隐式转换成无符号数,因此输出为>0

    记住一点:-1为有符号整型数据,常量数值在整形范围内,均为int类型,如果为正数或0,则作为无符号int,否则为有符号int。比较运算符两边的数据类型会在编译器的帮助下,自动统一的。

    再记住一点:C语言规定是从取值范围小的往大的提升,char—>unsigned char—>short—>unsigned short—>int--->unsinged int—>long—>unsigned long –>long long ---> unsigned long long

    2. 函数不能反悔栈内存的指针,可以返回堆内存的指针。对于空指针,连续两次free,不会出错。对于非空指针,连续两次free,会出错。

    int *a1;
        a1 = (int*)malloc(10);
        a1[0]=10;
        printf("a1:%p a1[0]:%d 
    ",a1,a1[0]);     //输出a1:0x85c9008 a1[0]:10
        free(a1);
        //free(a1);            //加上这句会报错
        printf("a1:%p a1[0]:%d 
    ",a1,a1[0]);    //输出a1:0x85c9008 a1[0]:0

    根据输出可以得知,free后,a1的指向的地址值没有改变,但是这块地址所代表的空间已经是无效空间了,不能使用。为了防止这种情况,free后的,应该设置a1= NULL; 这样,防止后面的代码对a1的空间误操作。

    3. 引用与指针有什么区别?

        引用必须初始化,指针不需要。

        引用初始化之后不能被改变,指针可以改变所指的对象。

        不存在指向空值的引用,但是存在指向空值的指针

    Technorati 标签:
  • 相关阅读:
    **没有规则可以创建“XXX”需要的目标“XXX”问题的解决方案
    牛逼博主
    tiny4412 busybox制作根文件系统rootfs nfs 挂载 ubuntu 14.04
    解决 mounting /dev/block/mmcblk0p1 on /sdcard failed
    如何在虚拟机上配置hadoop集群
    数据结构线性表
    a伪类,关于图片
    脱离标准文档流(2)---定位
    脱离标准文档流(1)---浮动
    初窥css---盒子以及盒子扩展
  • 原文地址:https://www.cnblogs.com/cherishui/p/4424496.html
Copyright © 2011-2022 走看看