鱼C论坛

 找回密码
 立即注册
查看: 800|回复: 2

[已解决]关于字符串数组的应用

[复制链接]
发表于 2019-12-4 17:00:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <iostream>
using namespace std;
void main(){
        char ch[3][4]={"AAA","BB","CCC"};
        char *p=NULL;
        char(*q)[4]=NULL;
        q=ch;
        int i;
        p=new char;
        *p='b';
        *(*q+3)=*p;
        for(i=0;i<3;i++)
                cout<<q[i]<<endl;
}
结果为:AAAbBB
             BB
            CCC
哪位大佬能解释一下:AAbBB怎么回事?
最佳答案
2019-12-4 19:15:24
本帖最后由 jackz007 于 2019-12-4 23:13 编辑

        q 指向 ch,* p = 'b',那么,语句:
  1.         *(* q + 3) = * p ;
复制代码

        实际上就是下面的语句:
  1.         ch[0][3] = 'b' ;
复制代码

        而 ch[0][3] 应该是字符串 ch[0] 的结束标志 '\0',可是,现在却变成了字符 'b' ,其结果,原来的字符串 ch[0] 和 ch[1] 拼接成为一个新的字符串 'AAAbBB',字符串 ch[1] 成为字符串 ch[0] 的后半部分。就是说,ch[0] 其实是包含 ch[1] 的。这个时候,如果打印 ch[0] ,会得到 'AAAbBB',如果打印 ch[1] ,还是原来的 'BB',如果打印 ch[3] 自然依旧是 'CCC'。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-4 19:15:24 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-12-4 23:13 编辑

        q 指向 ch,* p = 'b',那么,语句:
  1.         *(* q + 3) = * p ;
复制代码

        实际上就是下面的语句:
  1.         ch[0][3] = 'b' ;
复制代码

        而 ch[0][3] 应该是字符串 ch[0] 的结束标志 '\0',可是,现在却变成了字符 'b' ,其结果,原来的字符串 ch[0] 和 ch[1] 拼接成为一个新的字符串 'AAAbBB',字符串 ch[1] 成为字符串 ch[0] 的后半部分。就是说,ch[0] 其实是包含 ch[1] 的。这个时候,如果打印 ch[0] ,会得到 'AAAbBB',如果打印 ch[1] ,还是原来的 'BB',如果打印 ch[3] 自然依旧是 'CCC'。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-5 15:04:21 | 显示全部楼层
jackz007 发表于 2019-12-4 19:15
q 指向 ch,* p = 'b',那么,语句:

        实际上就是下面的语句:

感谢大佬,已明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 21:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表