为什么两个指针数组返回不同的地址?

问题描述 投票:0回答:1

在下面的代码中,我认为两个输出是相同的。但事实上他们不是!在我的电脑中,第一个输出是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

谁能解释一下这个问题吗?

c++ pointers
1个回答
0
投票

表达式中使用的数组指示符(极少数例外)会隐式转换为指向其第一个元素的指针。

如这两个数组

const char *s[] = {"flower","flow","flight"};
char *s1[] = { (char*)"flower",(char*)"flow",(char*)"flight" };

占用不同的内存范围,那么第一个元素的地址是不同的。

© www.soinside.com 2019 - 2024. All rights reserved.