c++ 析构函数后,内存被释放,那么该指针指向已经释放的内存空间。不是没用啊。那怎么影响到主函数的啊??
函数是这样一个#include<iostream>usingnamespacestd;voidswap(int*a,int*b){intc;cout<<"swap函数中,...
函数是这样一个
#include <iostream>
using namespace std;
void swap (int *a,int*b)
{int c;
cout<<"swap函数中,交换前,a:"<<*a<<"b:"<<*b<<endl;
c=*a;
*a=*b;
*b=c;
cout<<"swap函数中,交换后,a:"<<*a<<"b:"<<*b<<endl;
}
int main()
{
int a=3,b=4;
cout<<"主函数中,交换前,a:"<<*a<<"b:"<<*b<<endl;
swap(&a,&b);
cout<<"主函数中,交换后,a:"<<*a<<"b:"<<*b<<endl;
return 0;
} 展开
#include <iostream>
using namespace std;
void swap (int *a,int*b)
{int c;
cout<<"swap函数中,交换前,a:"<<*a<<"b:"<<*b<<endl;
c=*a;
*a=*b;
*b=c;
cout<<"swap函数中,交换后,a:"<<*a<<"b:"<<*b<<endl;
}
int main()
{
int a=3,b=4;
cout<<"主函数中,交换前,a:"<<*a<<"b:"<<*b<<endl;
swap(&a,&b);
cout<<"主函数中,交换后,a:"<<*a<<"b:"<<*b<<endl;
return 0;
} 展开
5个回答
展开全部
hi,很高兴能看见你这问题,我来分享一下我的看法哈。
第一,C++中析构函数是伴随类的释放而调用的,也就是说它是最后一个调用的函数。当然你也可以在它里面继续调用函数。
第二,cout<<"主函数中,交换前,a:"<<*a<<"b:"<<*b<<endl;这句话本意是想显示a、b的值。但是却错用了指针。这个不是错误的。例如你的a为100,那么显示的就是地址为100的相应的值。
第三,swap(&a,&b);这里传递的是地址。在swap中会对地址进行操作,不会关心你其中的值。主函数如果没有结束,这个地址是不会释放的。
第四,我详细你的C++基础还不够扎实,好好研究,好好学习。
最后祝你在软件中找到快乐!
第一,C++中析构函数是伴随类的释放而调用的,也就是说它是最后一个调用的函数。当然你也可以在它里面继续调用函数。
第二,cout<<"主函数中,交换前,a:"<<*a<<"b:"<<*b<<endl;这句话本意是想显示a、b的值。但是却错用了指针。这个不是错误的。例如你的a为100,那么显示的就是地址为100的相应的值。
第三,swap(&a,&b);这里传递的是地址。在swap中会对地址进行操作,不会关心你其中的值。主函数如果没有结束,这个地址是不会释放的。
第四,我详细你的C++基础还不够扎实,好好研究,好好学习。
最后祝你在软件中找到快乐!
追问
谢谢啊。刚自学接触到C++,感觉疑问很多。
展开全部
教你点吧:void swap (int *a,int*b);这个函数两个参数是指针型的,也就是你调用这个函数是把要交换的两个数的内存地址传进来了,这两个数你是在main函数中定义的即在main函数中给他们分配了一块内存空间,所以调用这个函数怎么可能会把他们的内存给释放呢?另外:因为你是直接对内存操作,所以当然会改变传进来的两个数的值。
补充说一下:c++的内存释放原理并不是那块内存上面的数据会擦除掉,而是将那块内存重新标
补充说一下:c++的内存释放原理并不是那块内存上面的数据会擦除掉,而是将那块内存重新标
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的main函数里的a和b两个变量声明的是int型,后面cout你给他加*就当指针处理了,输出地址是3和4位置的值,当然会报错,你把*去了试试。
这个和析构函数没有关系,析构是面向对象中类的概念,你这个是C的指针问题。
这个和析构函数没有关系,析构是面向对象中类的概念,你这个是C的指针问题。
追问
不好意思。在复制中有些忘记改了。。就是里面没有&和*,,就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不是很懂你的意思,只有类中才有析构函数,你代码里面没有类,也就无所谓析构函数了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你没定义类,哪来的析构函数阿?
追问
哦。通过值传递函数参数输出的结果一样吗
#include
using namespace std;
void swap (int a,intb)
{int c;
cout<<"swap函数中,交换前,a:"<<*a<<"b:"<<*b<<endl;
c=a;
a=b;
b=c;
cout<<"swap函数中,交换后,a:"<<*a<<"b:"<<*b<<endl;
}
int main()
{
int a=3,b=4;
cout<<"主函数中,交换前,a:"<<*a<<"b:"<<*b<<endl;
swap(a,b);
cout<<"主函数中,交换后,a:"<<*a<<"b:"<<*b<<endl;
return 0;
}
追答
你的代码是错误的阿,*是取值操作符,只能用在指针型变量前面,你定义的a,b都是整形,不能用*操作符的。还有通过值传递是不能改变实参的值的。继续好好的研究研究教材吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询