先看一个程序代码
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int main(){ char str1[] = "abc"; char str2[] = "abc"; char *str3 = "abc"; char *str4 = "abc"; //judge str1 is equal str2 if(str1 == str2){ cout<<"str1 == str2"<<endl; } else{ cout<<"str1 != str2"<<endl; } //judge str3 is equal str4 if(str3 == str4){ cout<<"str3 == str4"<<endl; } else{ cout<<"str3 != str4"<<endl; } return 0; }
输出结果是
str1 != str2
str3 == str4
解释如下:
1. str1和str2是两个字符数组,分别存储在栈空间上。str1表示这个字符数组的内存首地址,str2表示另一个字符数组的首地址,因为两个首地址是不同的所以str1 != str2。如图所示
2. str3和str4是两个指针,都是指向“abc”的内存首地址。"abc"是存储在内存中的某一个快地址,str3和str4同时指向这个首地址,因此str3 == str4,如图所示
3. 要获得str1和str2的地址为 &str1和&str2,并且有 &str1 != &str2;同时也有&str3 != &str4,因此这是获得指针变量在内存的地址,所以两个指针变量在内存中存储位置是不同的。
4. 要比较两个字符数组是否相同可以使用strcmp函数,而比较两个字符指针指向内容是否相同直接使用指针比较即可。
时间: 2024-10-26 05:58:02