【问题标题】:C - pointer in if conditionC - if 条件中的指针
【发布时间】:2017-07-17 13:26:18
【问题描述】:

假设我们有以下代码示例:

char *s="hello";

if(*s=='h'){

    printf("OK");

}

程序将显示'OK',因为比较为真。

但是,此代码背后的逻辑是字符和地址之间的比较(而不是地址的内容)。

知道*s 相当于一个地址,怎么可能让这个条件为真?

谢谢

【问题讨论】:

  • *s 不是地址。您正在取消引用 s 的地址。
  • *s 是一个字符。 s(没有*)是一个地址。获取一些 C 书籍并阅读处理指针的章节。
  • 为什么你认为“*s相当于一个地址”?它不是。正确的是s 相当于一个地址,*s 是位于该地址的对象。 (但最好说s 是一个指针,*s 是该指针指向的对象。)

标签: c pointers comparison character


【解决方案1】:

不是。 *(s+0)='h' //equal than *s *(s+1)='e'

's' 是那个字符串的地址。

【讨论】:

  • 您的 sn-p 尝试更改字符串文字,这是未定义的行为。
  • 从数学语言的角度来看,= 适合显示相等性,但看到 ; 最后暗示它是 C 代码,你应该放弃它或明确声明它不是 C .
【解决方案2】:

s 是一个地址,但*s 是一个由s 地址定位的值。因为schar*,所以*schar

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多