注册 登录
编程论坛 C++教室

C++ char**类型 使用困惑

pengweiqi 发布于 2022-11-06 12:29, 580 次点击
int main(int  argc, char** argv)
{
    char e[] ="ing";
    cin >> argc;
   
    cin >> *argv;
    cout << *argv;
   
    cin >> e;
    *(argv + 1) = e;
    cout << *(argv + 1) << endl;
    cin >> e;
    *(argv + 2) = e;
    cout << *(argv + 2) << endl;
    cin >> e;
    *(argv + 3) = e;
    cout << *(argv + 3)<<endl;
    cout << *(argv + 3) <<*(argv+2)<<*(argv+1)<< endl;
上面的代码我在Visual Studio 2019中调试结果如下:
5
string
string
out
out
so
so
how
how
howhowhow


困惑点:最后一个输出为什么三个都是how,按道理不是应该输出howsoout吗,求大佬们解惑,感激涕零。
4 回复
#2
C之进学者2022-11-06 12:56
让我很惊讶的是,未经初始化的指针的指针,直接访问居然不出错。
#3
rjsp2022-11-06 13:15
最后一个输出为什么三个都是how
你这三个都是指向e那个数组,难道你认为同一个对象能保存三个不同值,像量子状态叠加那样神奇?

未经初始化的指针的指针,直接访问居然不出错。
是不是未初始化从题主给出的信息中看不出来,缺少调用这个程序的程序的信息,比如给了几个参数,参数存放地是不是只读区域。
但即使是未初始化的指针,那也是“未定义行为”。“不出错”属于“未定义行为”的可能行为之一。
#4
C之进学者2022-11-06 13:38
回复 3楼 rjsp
感谢指正,才疏学浅了,main 会给到int argc = 0 和 char** argv 随机一个地址
*(argv + 1),*(argv + 2),*(argv + 3),三个指针 都指向 同一个变量e 也是为什么都是howhowhow的原因。
#5
leshui2022-11-09 19:48
你先搞懂 *argv==argv[argc]
1