C++的问题

求C++面向对象程序设计(第二版)(中国铁道出版社)里面最后的上机实验题(实验345)其中一个实验的答案谁能做的帮下忙补加50分... 求C++面向对象程序设计(第二版)(中国铁道出版社)里面最后的上机实验题 (实验 3 4 5)其中一个实验的答案 谁能做的帮下忙 补加50分 展开
 我来答
ucefj63
2010-12-24 · TA获得超过207个赞
知道答主
回答量:287
采纳率:100%
帮助的人:242万
展开全部
我给你解释一下吧,
咱们首先看f()函数, 你传的是个指针,接收的也是个指针, 这个没问题
然后你的while就出毛病了
while(*s1!='\0')
s1++;
咱们一步一步分析,你传进来的s1其实是string1[]的首地址, 那么*s1的值是1, 1!='\0'
这个为真, 执行s1++, 然后*s1的值变成了2, 那么继续判断2!='\0' , 这个也成立, 继续循环,其实,你的指针已经完全超出了你预定的界限了, 这个指针会一直++下去, 直到有一次*s1=0的时候, 这个循环就会结束。而*s1=0的这块内存, 其实一块未知区域。 所以会先输出一个0,然后咱们再返回到主函数, 你输出的是*string1 数组名其实就是首地址,那么你输出的就是string[]第一个元素,也就是你自己定义的1。
其实,不知不觉的,你的指针已经越界了, 指向了一块你肯本不知道的区域,但你却毫无察觉,并且计算机也不会报错,所以说指针是把双刃剑,因为很容易照成内存的泄露,并且在你不知情的情况下
#include<iostream>
using namespace std;

void f(int *,int);

int main()
{
int string1[5]=;

int n=sizeof(string1)/sizeof(int);
f(string1,n);

return 0;
}

void f(int *s1,int n)
{

for(int i=0;i<n;i++)
{
cout<<*s1++<<endl;
}

}

这个供你参考一下, 这个代码就是调用函数输出你定义的数组
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式