【发布时间】:2021-01-30 19:16:46
【问题描述】:
此代码将输出字符串中字符的索引:
#include <stdio.h>
#include <string.h>
int main(void){
char str[100]="birds are dying";
char *p;
p = strchr(str,'e');
int i=p-str;
printf("%d" , i);
return 0;
}
我无法理解的唯一代码行是:
int i=p-str;
-
str 是字符串,p 也是,我搜索了将字符串打印为整数的结果,发现这是一个未定义的行为,那么它实际上返回了什么?
-
p - str 是:
e dying - birds are dying,当我们以某种方式将其更改为整数时,为什么它返回正值
谢谢
【问题讨论】:
-
"string" 是 C 中的一个加载术语:在不同的上下文中可能意味着不同的东西。在您的代码中,
str是一个 16 个字符的数组(在许多情况下[例如基本算术],使用其标识符将其转换为指向其第一个元素的指针),p是指向 char 的指针。减去两个指针(指向 sme 对象内的某处)产生基础类型元素数量的距离(在您的情况下以字符为单位的距离)。 -
可以看到表达式的类型是
int。那么,为什么您认为您“将字符串打印为整数”?您将int打印为整数。 -
搜索词:指针算法
-
更具体地说:您的“字符串 - 字符串”实际上是“指针 - 数组”,它被转换为“指针 - 指针”。减法的结果类型为
ptrdiff_t,并通过赋值转换为int -
@pmg Braino/typo:
ptr_diff=>ptrdiff_t.
标签: c c-strings pointer-arithmetic string.h strchr