| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 935 人关注过本帖
标题:C++ char**类型 使用困惑
只看楼主 加入收藏
pengweiqi
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2022-11-6
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
C++ char**类型 使用困惑
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吗,求大佬们解惑,感激涕零。
搜索更多相关主题的帖子: char 困惑 类型 cout cin 
2022-11-06 12:29
C之进学者
Rank: 1
等 级:新手上路
威 望:1
帖 子:3
专家分:8
注 册:2022-10-16
收藏
得分:7 
让我很惊讶的是,未经初始化的指针的指针,直接访问居然不出错。
2022-11-06 12:56
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:7 
最后一个输出为什么三个都是how
你这三个都是指向e那个数组,难道你认为同一个对象能保存三个不同值,像量子状态叠加那样神奇?

未经初始化的指针的指针,直接访问居然不出错。
是不是未初始化从题主给出的信息中看不出来,缺少调用这个程序的程序的信息,比如给了几个参数,参数存放地是不是只读区域。
但即使是未初始化的指针,那也是“未定义行为”。“不出错”属于“未定义行为”的可能行为之一。
2022-11-06 13:15
C之进学者
Rank: 1
等 级:新手上路
威 望:1
帖 子:3
专家分:8
注 册:2022-10-16
收藏
得分:0 
回复 3楼 rjsp
感谢指正,才疏学浅了,main 会给到int argc = 0 和 char** argv 随机一个地址
*(argv + 1),*(argv + 2),*(argv + 3),三个指针 都指向 同一个变量e 也是为什么都是howhowhow的原因。
2022-11-06 13:38
leshui
Rank: 2
等 级:论坛游民
威 望:1
帖 子:7
专家分:17
注 册:2022-10-24
收藏
得分:7 
你先搞懂 *argv==argv[argc]
2022-11-09 19:48
快速回复:C++ char**类型 使用困惑
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016492 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved