zoukankan      html  css  js  c++  java
  • 指针减法

    今天在做文件名处理时,发现以前对不同类型的指针之间做减的理解有误。
    得到文件名(ptcFilename)后,想要过滤掉后缀、再做显示。于是用了 wcsrchr() 函数得到文件名中最后一个 . 的位置指针(ptcSuffix)。
    通过 ptcSuffix - ptcFilename 可以获得到偏移量。
    例如: 不考虑 ptcSuffix 和 ptcFilename 的类型时, 当 ptcSuffix = 0x1f81e0, ptcFilename = 0x1f81f0,则 ptcSuffix - ptcFilename = 0x10,十进制为: 16。
    由于在 WinCE 下,一般字符串都是 TCHAR 类型的,所以我就想得到的值再除以 sizeof(TCHAR) 就可以得到想要的偏移量,即 (ptcSuffix - ptcFilename) / sizeof(TCHAR)。
    按此想法 Coding 后运行,发现没有得到想要的显示字符串,比想要的字符串短了一半左右。
    想想实现的思路应该是没有错的,那么错在哪里?唯一值得怀疑也就是: ptcSuffix - ptcFilename 的值。
    于是写了一个简单的测试函数,如下:
     1 void TestPointOfTypes(void)  
     2 {  
     3 #define POINT_START 0x1f81e0  
     4 #define POINT_END 0x1f81f0  
     5   char *pcStart = (char *)POINT_START;  
     6   char *pcEnd = (char *)POINT_END;  
     7   TCHAR *ptcStart = (TCHAR *)POINT_START;  
     8   TCHAR *ptcEnd = (TCHAR *)POINT_END;  
     9   int *piStart = (int *)POINT_START;  
    10   int *piEnd = (int *)POINT_END;  
    11   double *pdStart = (double *)POINT_START;  
    12   double *pdEnd = (double *)POINT_END;  
    13   
    14   //运行结果: from 0x1F81E0 to 0x1F81F0: char: 16;TCHAR: 8;int: 4;double: 2  
    15   RETAILMSG(1,(L"from 0x%X to 0x%X: char: %d;TCHAR: %d;int: %d;double: %d
    ",  
    16     POINT_START,POINT_END,  
    17     pcEnd - pcStart,  
    18     ptcEnd - ptcStart,  
    19     piEnd - piStart,  
    20     pdEnd - pdStart));  
    21 }  


    验证了自己的想法,指针之间的减法与指针的类型有关。

  • 相关阅读:
    IntelliJ Idea 快捷键列表
    mysql索引类型和方式
    基本git指令
    idea中deBug方法
    BeanUtils.copyProperties(A,B)使用注意事项
    MySQL字段类型
    JAVA常识1
    Redis在windows下的安装下载
    Netty
    IDEA工具
  • 原文地址:https://www.cnblogs.com/91program/p/5201471.html
Copyright © 2011-2022 走看看