首页 > 解决方案 > 为什么要打印两个指针相减的结果并抛出警告?

问题描述

我正在尝试减去 2 个指针,以便它们给出元素的数量。我可以编译程序并运行它。但是编译后它会抛出错误

pointerarithmetic.c: In function ‘main’:
pointerarithmetic.c:9:8: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long int’ [-Wformat=]
 printf("%d",(q-p));

编码:

#include<stdio.h>

    int main(){
    int a[5]={0,10,20,30,40};
    int *p,*q;
    p=&a[0];
    q=&a[2];
    printf("%d",*p);
    printf("%d",*q);
    printf("%d",(q-p));
    return 0;
    }

预期的输出应该是元素的数量。

标签: cpointerssubtraction

解决方案


指针的减法返回一个类型ptrdiff_t(在 中定义stddef.h),而不是一个 int。

用于%td打印结果。


推荐阅读