在下面的代码中,我认为两个输出是相同的。但事实上他们不是!在我的电脑中,第一个输出是0x6ffde0,而后一个输出是0x6ffdb0。
#include<iostream>
using namespace std;
int main(){
const char *s[] = {"flower","flow","flight"};
char *s1[] = { (char*)"flower",(char*)"flow",(char*)"flight" };
cout << s<< endl; // 0x6ffde0
cout << s1<< endl; // 0x6ffdb0
return 0;
}
我尝试输出“flower”和(char*)“flower”的地址。结果是一样的。
cout<<(int *)"flower"<<endl; // 0x488010
cout<<(int *)(char*)"flower"<<endl;// 0x488010
谁能解释一下这个问题吗?
表达式中使用的数组指示符(极少数例外)会隐式转换为指向其第一个元素的指针。
如这两个数组
const char *s[] = {"flower","flow","flight"};
char *s1[] = { (char*)"flower",(char*)"flow",(char*)"flight" };
占用不同的内存范围,那么第一个元素的地址是不同的。