【问题标题】:Value of pointer C指针 C 的值
【发布时间】:2018-09-17 19:51:16
【问题描述】:

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

#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?应该还是内存单元的个数吧?

【问题讨论】:

  • printf("%f",ii); 是一个无意义的函数调用。行为未定义。

标签: c pointers printf dev-c++


【解决方案1】:
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

【讨论】:

  • 我知道 *ii == 0;因为 hh[0] != 4 但为什么 ii = 0?
  • ii != 0;用这个打印它的地址:printf("%u",(unsigned int)ii);
  • 如果指针ii的值是0,你会在尝试访问*ii时出现分段错误;所以是的ii 不是指向 0 而是指向一个地址;
  • 非常感谢您的回答!
【解决方案2】:

您尝试使用 %f 打印指针,该指针会打印双精度数。可变参数中不正确的 int-float 匹配是未定义行为的模糊路径。在 printf 中使用 %p 作为指针。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 2016-12-23
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    相关资源
    最近更新 更多