【问题标题】:Aren't address supposed to work like normal numbers (int)? [duplicate]地址不应该像普通数字(int)一样工作吗? [复制]
【发布时间】:2020-07-02 00:13:21
【问题描述】:
#include <stdio.h>
#include <stdlib.h>


int main(){
    int i[5] = {0};
    printf("%d - %d = %d" , i+1 , i , (i+1)-(i));
    return 0;
}

我知道一个 int 是 4 个字节,但地址不应该像普通数字 (int) 那样工作吗?

【问题讨论】:

  • 请学习表达式。表达式也有类型!
  • @Saad Jlil: No.
  • 此代码在没有警告的情况下无法编译。

标签: c pointers


【解决方案1】:

不,地址不应该像普通数字一样工作。编译器使用指向的类型的元素自动调整地址算术以以元素为单位工作。

不要使用%d 打印地址。使用%p 并将地址转换为void *

不要打印与%d 的地址差异。使用%td

正确的printf 应该是printf("%p - %p = %td.\n", (void *) (i+1), (void *) i, (i+1) - i);。这将为差异打印“1”,因为地址i+1i 相差一个元素。

【讨论】:

    猜你喜欢
    • 2012-09-06
    • 2015-11-08
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 2012-01-29
    相关资源
    最近更新 更多