• C易忽视的基础


    1.输出格式控制:%x按int型16进制输出; %d按int型十进制输出;变量超出4字节会丢掉低位!!!!(却不是被截断!!!)

    void main()
    {
    int a=0x11223344;
    long b=0x1122334455667788;
    int c = b;
    int d = (int)b;
    char *pc = &a;
    printf("sizaof(int)=%d sizeof(long)=%d ", sizeof(int), sizeof(long));

    printf("b=0x%x ", b);
    printf("b=0x%p ", b);
    printf("c=0x%x ", c);
    printf("c=%p ", c);
    printf("d=0x%x ", d);
    printf("d=%p ", d);
    printf("pc=%x ", *pc);
    }

    输出:

    sizaof(int)=4 sizeof(long)=8
    b=0x55667788
    b=0x0x1122334455667788
    c=0x55667788
    c=0x55667788
    d=0x55667788
    d=0x55667788
    pc=44

    小端低位地址,高位高址,直接截断

    2.全局变量的初始化右值必须是常量(可以常量运算), 但是不能是变量,因为编译器在编译期不知道变量的值是什么。

    int a = 10+5;
    int b = a;      

    3. 无符号数进行减除操作,需要注意

    void main()
    {
        unsigned int a = 1, b = 2;
        unsigned int c = a - b;
        unsigned int d = c / 100;
    
        printf("d=%d
    ", d); /*d=42949672*/
    }
    void main()
    {
        unsigned int a = 1, b= 0, c=0, d=1;
        unsigned int m, n, p;
    
        m = a - b;
        n = c - d;
        p = (m*1000 + n)/1000;
    
        printf("p=%d
    ", p); /*unsigned int: 0, unsigned char 1*/
    }

    4. sizeof("Hello") 为6,不为4或8!

    5. (*p)++ 与 *p++

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 
     5 void main()
     6 {
     7     int a = 10;
     8     char *p = &a;
     9     printf("p=%p, *p=%d
    ", p, *p);
    10     
    11     (*p)++ = 20;
    12     
    13     printf("p=%p, *p=%d
    ", p, *p);
    14 }
    15 
    16 /*
    17 *p++ = 20;
    18 p=0x7ffc77230674, *p=10
    19 p=0x7ffc77230675, *p=0
    20 
    21 (*p)++ = 20;
    22 test.c:11:9: error: lvalue required as left operand of assignment
    23   (*p)++ = 20;
    24          ^
    25 */

    6. memcpy() 与 memmove()的区别是前者原地址和目的地址不能重复,后者是可以重复的。

    7.由于浮点型数据并没有准确的数值, 所以不得进行相等(或不相等)比较

    float value = 12.23;
    if (value == 12.23) { //判断结果为false
        ....
    }
    
    如果需要对其进行等值判断, 可采用类似如下方式:
    float value = 12.23if (value >= 12.2299 && value <= 12.2301) { //判断结果为true
        ....
    }
  • 相关阅读:
    1.shell编程-变量的高级用法
    1.python简介
    1.numpy的用法
    1.MySQL(一)
    1.HTML
    1.Go-copy函数、sort排序、双向链表、list操作和双向循环链表
    1.Flask URL和视图
    1.Django自学课堂
    1.Django安装与运行
    ajax跨站请求伪造
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/8604173.html
Copyright © 2020-2023  润新知