指针C的值

时间:2018-04-08 07:38:17

标签: c pointers printf dev-c++

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

#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 个答案:

答案 0 :(得分:2)

您试图用%f打印一个指针,该指针打印出了双精度字。 varargs中错误的int-float匹配是导致不确定行为的模糊路径。将%p用作printf中的指针。

答案 1 :(得分:0)

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