我有一个问题!我正在考虑指针的价值。
#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?它应该不是存储单元的数量吗?
答案 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