指针 C 的值
Value of pointer 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?应该不是记忆单元数吧?
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
您试图用 %f 打印一个指针,它打印了双精度值。 varargs 中不正确的 int-float 匹配是通往未定义行为的模糊路径。在 printf 中使用 %p 作为指针。
我有一个问题!我正在考虑指针的值。
#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?应该不是记忆单元数吧?
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
您试图用 %f 打印一个指针,它打印了双精度值。 varargs 中不正确的 int-float 匹配是通往未定义行为的模糊路径。在 printf 中使用 %p 作为指针。