C++的问题
求C++面向对象程序设计(第二版)(中国铁道出版社)里面最后的上机实验题(实验345)其中一个实验的答案谁能做的帮下忙补加50分...
求C++面向对象程序设计(第二版)(中国铁道出版社)里面最后的上机实验题 (实验 3 4 5)其中一个实验的答案 谁能做的帮下忙 补加50分
展开
1个回答
展开全部
我给你解释一下吧,
咱们首先看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;
}
}
这个供你参考一下, 这个代码就是调用函数输出你定义的数组
咱们首先看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;
}
}
这个供你参考一下, 这个代码就是调用函数输出你定义的数组
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询