zoukankan      html  css  js  c++  java
  • C中有关内存操作的一些Tip

    假设一个数组a,数组元素都是int,数组共有3个元素,那么

    a+1整个表达式就等于a[1]

    此时如果假设在系统中,一个int使用2个Byte来存储,那么a+1这个表达式其实是将

    a的地址向后移动了2个Byte,如果要将a的地址往后移动1个Byte的话,那么可以这样作

    unsigned char *p = a;

    p+1 ---------------- 此时就实现了a的地址向后移动1个Byte,因为unsigned char是以1个Byte来存放

    这里可能有个疑问,unsigned char和char有什么区别呢?我们都知道,char其实是ASCII码,使用8个Bit来存储,但是最高位不考虑,也就是说只有1-127才有定义, 128以上的ASCII码是没有定义的(定义为扩展字符);但是unsigned char的话,128以上的字符他也可以认识,就是会显示为扩展字符,也就是说最高位如果为1,unsigned char也是可以显示和定义的

    另外,在C中,对于struct,我们在引用其内部的element的时候,不要使用地址偏移的做法来作,要使用C语法中定义的.号和-> 号来取,因为struct在内存中存放的时候有一个地址对齐的做法,如果我们使用将struct的基地址向后偏移的方式来取其中的element,那么可 能会出现问题的
  • 相关阅读:
    NOI2019 I 君的商店
    CF1326F
    APIO2016 划艇
    LeetCode-Remove Nth Node From End of List
    LeetCode-Remove Element
    LeetCode-Remove Duplicates from Sorted List II
    LeetCode-Remove Duplicates from Sorted List
    LeetCode-Unique Paths II
    LeetCode-Unique Paths
    LeetCode-Remove Duplicates from Sorted Array II
  • 原文地址:https://www.cnblogs.com/super119/p/2005628.html
Copyright © 2011-2022 走看看