Heessy 2015-11-18 03:02 采纳率: 0%
浏览 2259

不能通过改变指针形参的值而使指针实参的值改变

#include
int s(int *a,int *b)
{
int t;
t=*a;
*a=*b;
*b=t;
}
main()
{
int a,b;
int *p1,*p2;
scanf("%d,%d",&a,&b);
p1=&a;
p2=&b;
if (a<b)
s(p1,p2);
printf("%d,%d",*p1,*p2);
}

这是代码1。

 swap(int *p1,int *p2)
{int *p;
 p=p1;
 p1=p2;
 p2=p;
}
main()
{
int a,b;
int *pointer_1,*pointer_2;
  scanf("%d,%d",&a,&b);
  pointer_1=&a;pointer_2=&b;
  if(a<b) swap(pointer_1,pointer_2);
  printf("\n%d,%d\n",*pointer_1,*pointer_2);
}
这是代码2。

#include
int s(int a,int b)
{
int temp;
temp=a;
a=b;
b=temp;

}
main()
{
int a,b;
a=3;b=4;
s(a,b);
printf("%d,%d",a,b);
}
这是代码3。
下面的是我对这三个代码的理解
代码1和代码2的区别是,代码1指针地址不变,而指针地址里的内容发生了改变。代码2的地址里的内容不发生改变而是两个指针交换地址。
代码3没有指针只是一般的交换。
然后我就不理解了,如果说是形参在函数调用完毕就释放而且没有return语句的话,主函数的值应当不发生改变。这样的话,代码1的主函数的实参数值交换没法解释。当然代码2和3按照这个逻辑是可以解释的。还有代码1的swap函数里的间接调用
和代码3的直接调用这样有区别吗?

  • 写回答

2条回答 默认 最新

  • Robot-C 2015-11-18 03:07
    关注

    对于指针,同样不能企图通过改变指针形参的值而使指针实参的值改变。因为他们采用的都是单向的“值传递”方式,实参可以把数据传给形参,形参却不可以把数据传回给实参。
    #include
    using namespace std;
    int main()
    {
     void swap(int *p1, int *p2);
     int a, b;
     int *pointer_1, *pointer_2;......
    答案就在这里:不能企图通过改变指针形参的值而使指针实参的值改变
    ----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。

    评论

报告相同问题?

悬赏问题

  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图2.0 版本点聚合中Marker的位置无法实时更新,如何解决呢?
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题