扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
在 huan(int *p1,int *p2)这个函数中,交换的只是两个指针的指向,但是函数的结束、返回,这两个指针本身就消失了(它们的值并不会传回到main()函数中)所以,最后的结果没有交换。
创新互联长期为成百上千客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为宣威企业提供专业的做网站、成都网站制作,宣威网站改版等技术服务。拥有十余年丰富建站经验和众多成功案例,为您定制开发。
不可以。为什么不可以,你是企图通过改变指针形参的值而使指针实参的值也改变。函数调用结束后,pp2变量所占存储空间被释放。
c语言中形参与实参的关系是:形参是实参的值副本。无论参数的类型是什么,传递到子函数中的形参只是实参的值。所以,在改变形参变量自身的值时,是与实参无关的。换句话说,形参的改变不会影响到实参。
修改了一下程序,如下所示。你的fun函数的那个排序过程我理解的不是太清。我用选择排序完成了你的要求。你自己检查检查再。
1、你没有说清函数中的指针和主函数的指针什么关系,很难如果每个都是独立的指针其值肯定不会影响到其他的指针。
2、C语言主要靠函数调用和return在函数之间切换,很难做到在多层调用中直接返回主函数。虽然goto语句可以无条件跳转,但是必须在同一个函数中使用。
3、调用结束后,所有实际参数的值均不会发生变化。
4、而这里是指针传递:传递的是指向变量的指针,函数中直接对指针指向的内容操作,实际上就是直接操作主调函数中的该指针指向的变量。
5、如果不用指针,那就是值传递,在Moveblock中对x,y的操作不会影响对主函数中的x,y。这主要是传地址与值传递的区别。
指针传递可以改变其指向地址的内容,但不能改变原指针的指向。如果需要改变指向,需要使用指向指针的指针作为参数。
如果只是要改变指针指向的值, 那么传入结构体指针即可。传入二级指针,一般是要在函数内分配内存, 也就是改变指针本身的指向。
第一个:int *p;p=是正确的。定义指针变量p,然后才将p指向变量a的地址。第二个:int *p;p=int* (&a);p是指针,指向的是地址,而不是int型值,因此是错误的。
1、如果函数参数直接传递的是指针类型,那么在函数内改变指针指向,并不能影响函数外的指针实例。只有传入指针的指针,才能改变指针的指向。函数里的形参是一般变量,在函数里面改变变量的值,不会改变主函数里实参的值。
2、指针传递可以改变其指向地址的内容,但不能改变原指针的指向。如果需要改变指向,需要使用指向指针的指针作为参数。
3、通过数组或者指针把主函数main()中的数据传到函数中,程序改动如下,已经在win-tc和Dev-c++下调试通过。
4、你原代码函数那样写是实现不了数组交换的,我用你的代码小做修改。你看下吧。说明:^=只是利用异或来实现2个地址的数值交换,和你定义一个变量做交换是一个效果。
5、并不是不规范的问题,你子程序写法只能在子程序中输出正确的数据,而在主函数中无法得到交换过的x和y的值。参考程序运用指针让子程序去读写a和b的值,在子程序执行完成后,a和b的值确实得到了交换。
1、如果函数参数直接传递的是指针类型,那么在函数内改变指针指向,并不能影响函数外的指针实例。只有传入指针的指针,才能改变指针的指向。函数里的形参是一般变量,在函数里面改变变量的值,不会改变主函数里实参的值。
2、也就是说pp在栈中,而其指向的字符串在静态存储区中。所以能改变pp指向,但是不能改变其指向的值。你想把C/C++学明白了,一定要让内存在你心中透明。
3、引用初始化以后不能被改变,指针可以改变所指的对象。3)不存在指向空值的引用,但是存在指向空值的指针。C++中尽量用引用。个人觉得所有的引用都可以用指针,但指针比引用容易出错。
4、调用函数,只能改变指针指向的内存空间的内容,不能改变实参指针变量的值。我觉得题主对指针变量,还算有一点了解。指针变量,其实也就是一个变量,但它的值是一块内存的地址。
5、这个是常量指针的说法。 意思是指向常量的指针。比如 const char * p=abcd可以做p=mnop这样的赋值, 即可以改变p值。但不能做*p=s这样的赋值。即不能改变指向的数据。
1、如果只是要改变指针指向的值, 那么传入结构体指针即可。传入二级指针,一般是要在函数内分配内存, 也就是改变指针本身的指向。
2、但是就是你这样不错,你也最好不要这么写,你在将变量a,b,c的值赋给指针p1,p2,p3指向的值以后最好不要在利用变量a,b,c。
3、对掉各个指针的顺序。当然要用到一个中间的指针变量来做交换指针内容的中介。
4、问题:输入三个数a,b,c,把其中的最大值赋值给c,中间赋值给b,最小值赋值给a。输出a,b,c。
5、for(i=0;i2;i++)for(j=0;j3;j++)这两个for循环错误,j至少要保证大于等于i,否则你前面交换的值后面又被换回去了。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流