该题是牛客网上的题目:
#include <iostream>
using namespace std;
int main()
{
char str1[] = "hello world";
char str2[] = "hello world";
const char str3[] = "hello world";
const char str4[] = "hello world";
const char* pstring1 = "hello world";
const char* pstring2 = "hello world";
cout << boolalpha << ( str1==str2 ) << ',' ;
cout << boolalpha << ( str3==str4 ) << ',' ;
cout << boolalpha << ( pstring1==pstring2 ) <<endl;
return 0;
}
运行结果:
false,false,true
( str1==str2 ) 比较的是字符串的首地址
( str3==str4 ) 比较的是字符串的首地址
( pstring1==pstring2 ) 比较的是字符串的首地址
str1、str2、str3以及str4都是栈中定义的局部变量数组,并且进行了初始化,地址肯定会不一样。
而pstring1、pstring2则是指针,虽然本身在栈中,但是所指向的是一个字串常量。题中比较的就是所指向的地址,所以为true。
如果真要比较字符串内容的话,可以用 strcmp()
#include<iostream>
#include<string.h>
using namespace std;
int main(){
char a[5]="1234";
char b[5]="1234";
const char* pstring1 = "hello world";
const char* pstring2 = "hello world";
cout<<strcmp(a,b)<<endl;
cout<<strcmp(pstring1,pstring2)<<endl;
return 0;
}
结果为0则代表两个字符串内容相等,1为大于,-1为小于