双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

C语言中指针:不能通过改变指针形参的值而使指针实参的值改变

Heessy Heessy 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#include<stdio.h>
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<stdio.h>
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的直接调用这样有区别吗?
...全文

相关推荐

评论 7
收藏 已收藏
分享
返回顶部
Heessy
C语言 70,039 成员 243,237 内容