为什么程序执行为乱码?
#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;}
展开
6个回答
展开全部
首先语言搞清楚你需要输出啥,如果是想输出赋值后的数组,那你的输出语句cout<<*p<<endl;位置是不对的。你需要把这句放到p++语句之前。
现在题目中的代码p在执行完for语句之后,已经不指向数组元素了。
现在题目中的代码p在执行完for语句之后,已经不指向数组元素了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
换个代码格式吧
问题是最后输出*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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
输出语句移到如下位置,如果放到for循环外面,因为p不断增量已经指向数组之外,当然输出不是数组的任何一个值。
......
*p = i + 1;//赋值主要在这里实现
cout << *p << endl; // 输出要放这里
p++;
......
......
*p = i + 1;//赋值主要在这里实现
cout << *p << endl; // 输出要放这里
p++;
......
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询