代码之家  ›  专栏  ›  技术社区  ›  141_MATRIX_141

指针C的值

  •  0
  • 141_MATRIX_141  · 技术社区  · 8 年前

    我有一个问题!我在考虑指针的值。

    #include <stdio.h>
    
    #define dd NULL
    enum {ee=1} ff=ee+17;
    
    int main()
    {
    
    float hh[]={10,4,(float)('b'-'d')};
    
    static float *ii=dd;
    
    hh[0]+=6/4;
    ii=&hh[2]-1;
    *ii=ii[0]+3;
    ii[-1]=(*(hh+1))+2;
    hh[2]=*(++ii)*2;
    *ii=(hh[0]==4);
    printf("%f",ii);
    

    为什么指针ii的值=0?它不应该仍然是内存单元的数量?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Joshua    7 年前

    您试图打印带有%f的指针,该指针打印双倍。varargs中不正确的int float匹配是未定义行为的模糊路径。对printf中的指针使用%p。

        2
  •  0
  •   Sébastien S.    8 年前
    hh[0]+=6/4; /* hh[0] = 11.000000 */
    ii=&hh[2]-1; /* *ii =  hh[2 - 1] = 4.000000 */
    *ii=ii[0]+3; /* *ii = 4 + 3 = 7.000000 */
    ii[-1]=(*(hh+1))+2; /* hh[0] = h[1] + 2 = 9.000000 */
    hh[2]=*(++ii)*2; /* hh[2] = *ii = hh[2] * 2 = ((float)('b'-'d')) * 2 = -4.000000 */
    *ii=(hh[0]==4); /* *ii = 0 */
    

    *ii==0;因为hh[0]!=4.