如下例:
点击(此处)折叠或打开
- #include <stdio.h>
- int main()
- {
- char * s = "abc";
- char * ss = "abd";
- if(*s == *ss){
- printf("==\n");
- }else{
- printf("!=\n");
- }
- return 0;
- }
输出是:
原因是 if 语句比较的是两个指针所在位置的第一个字节的值。
c语言的字符串比较函数是strcmp(const char * s1, const char * s2);
如果比较的是别的类型,比如char,int8,int16,int32,float,double,那么“==”会考虑类型,另外,
如果这么比较:
if ("abc" == "abd") ...
那么结果是“否”。
那么是否可以这么说:当两个指针比较时,只比较第一个字节,而不管指针类型?
验证:
点击(此处)折叠或打开
- #include <stdio.h>
- int main()
- {
- char * s = "abc";
- char * ss = "abd";
- int * i = (int *)s;
- unsigned int * j = (unsigned int *)ss;
- printf("%x, %x\n", *i, *j);
- if(*j == *i){
- printf("==\n");
- }else{
- printf("!=\n");
- }
- return 0;
- }
输出:
可见对于int类型和unsinged int类型的指针,比较的不仅仅是第一个字节。
对于c语言来说,因为没有字符串类型的指针,只能用指向字符的指针来代替。
阅读(897) | 评论(0) | 转发(0) |