如何解决无法理解使用strchr来获取C中字符串中字符的位置
#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;
-
p-str是
e dying - birds are dying
,当我们以某种方式将其更改为整数时,为什么它返回正值
谢谢
解决方法
它不是字符串-它是一个指针。这是合法的指针算法。它以指向者为单位工作。假设你有
double x[10],*start,*end;
integer exclusive;
start = &x[2];
end = &x[4];
exclusive = end - start;
printf("%d\n",exclusive);
您认为将要印刷什么?您将得到2:而不是2 * sizeof(double)。
,根据C标准(6.3.2.1左值,数组和函数指示符)
3除非它是sizeof运算符的操作数或一元& 运算符,或者是用于初始化数组的字符串文字, 类型为“类型数组”的表达式将转换为 类型为“要输入的指针”的表达式指向初始 数组对象的元素,不是左值。如果数组对象 具有寄存器存储类,行为未定义
在此次通话中
p = strchr(str,'e');
函数strchr
返回一个指向符号'e'.
的指针
在表达式中
p-str
具有数组类型char[100]
的对象str隐式转换为指向其第一个元素的指针。因此表达式表示两个指针的区别。
并根据C标准(6.5.6加法运算符)
9当两个指针相减时,两个都应指向的元素 相同的数组对象,或者在数组的最后一个元素之后 目的;结果是两者的下标不同 数组元素....
因此,区别在于两个指针之间的元素数量产生了所找到符号的索引,因为表达式str
(在将数组str
隐式转换为指针之后)指向第一个元素的数组。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。