为什么程序执行为乱码?

#include<iostream>usingnamespacestd;#include<string>voidtest(int*p){intbuf[4];inti=0;... #include<iostream>using namespace std;#include<string>void test(int *p){ int buf[4]; int i=0; p = &buf[0]; for(i=0;i<4;i++) { *p = i+1;//赋值主要在这里实现 p++; } cout<<*p<<endl;}int main(){ int buf[4]; test(buf); system("pause"); return 0;} 展开
 我来答
听不清啊
高粉答主

2021-08-06 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部

一楼的运行之所以没有出错,是他把“p++;”这一行留在了注释中了。

原来的程序之所以出错,是因为循环体的最后一句p++;把p指向了尚未赋值的元素。如果在循环结束后直接输出*p的话,就是输出buf[4](数组越界了,且尚未赋值)。

格里编程办公技巧
科技发烧友

2021-08-05 · 编程、办公知识分享与学习
格里编程办公技巧
采纳数:434 获赞数:878

向TA提问 私信TA
展开全部
首先语言搞清楚你需要输出啥,如果是想输出赋值后的数组,那你的输出语句cout<<*p<<endl;位置是不对的。你需要把这句放到p++语句之前。
现在题目中的代码p在执行完for语句之后,已经不指向数组元素了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
夕子学姐吖

2021-08-05 · 超过21用户采纳过TA的回答
知道答主
回答量:369
采纳率:38%
帮助的人:18.8万
展开全部

看一下是不是程序存储路径有中文的缘故,或者是程序名字中文的缘故。在我这里没有出现乱码。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
青云
2021-08-05 · TA获得超过364个赞
知道小有建树答主
回答量:322
采纳率:50%
帮助的人:72.7万
展开全部
  1. 换个代码格式吧

  2. 问题是最后输出*p时,p指向一个危险的内存地址

    #include<iostream>
    using namespace std;
    #include<string>

    void test(int *p){
    int buf[4];
    int i=0;
    p = &buf[0];
    for(i=0;i<4;i++) {
    *p = i+1;//赋值主要在这里实现
    p++;
    }
    cout<<*p<<endl; // p在前面遍历后,指向了buf[4],也就是buf数组下一个内存,这样会出现乱码
    }

    int main()
    {
    int buf[4]; // 这个定义没啥作用
    test(buf);
    system("pause");
    return 0;
    }

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友c1994c5f8
2021-08-05 · TA获得超过1332个赞
知道小有建树答主
回答量:264
采纳率:89%
帮助的人:200万
展开全部
输出语句移到如下位置,如果放到for循环外面,因为p不断增量已经指向数组之外,当然输出不是数组的任何一个值。

......
*p = i + 1;//赋值主要在这里实现
cout << *p << endl; // 输出要放这里
p++;
......
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式