c - 为什么要打印两个指针相减的结果并抛出警告?
问题描述
我正在尝试减去 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;
}
预期的输出应该是元素的数量。
解决方案
指针的减法返回一个类型ptrdiff_t
(在 中定义stddef.h
),而不是一个 int。
用于%td
打印结果。
推荐阅读
- c# - 如何在后台线程上将 UI 元素序列化为 JSON?
- android - 当我向下滑动或向上滑动时更改运动事件的视图高度
- pine-script - 如何实现更高分辨率的平滑?
- java - Spring Boot 内部基于参数转发请求
- php - 为什么 mysqli_stmt::get_result() 方法在作为函数参数传递时会出错?
- c++ - 如何检查字符串是否包含另一个字符串(但中间可能有其他字母)?
- python - 用 Pymc 拟合卡方分布
- nosql - Cosmos DB 查询以连接主文档上的子文档
- npm - NPM:如果找不到包内的文件,我该如何解决?
- go - 停止计时器会结束 goroutine 吗?