为了账号安全,请及时绑定邮箱和手机立即绑定

为什么不能将交换函数中的临时变量定义为指针???

void swap(int *a, int *b)
{
    int *tmp;
    *tmp = *a;
    *a = *b;
    *b = *tmp;
}

gcc之后执行"./a.out"报错"Segmentation fault (core dumped)"

正在回答

2 回答

等号右边*a表示取出指针a指向的数据,这里tmp就是整数类型,所以不需要加。换言之,tmp表示整数类型,*a也表示整数类型。造成这样的疑惑是因为对于*a在不同位置理解含义不同导致的:*a处于函数参数位置时,仅表示这里函数传参需要一个指针类型的变量;当*a处于等号右边时表示取出指针a代表的实际变量值。

2 回复 有任何疑惑可以回复我~

百度搜索了一下“野指针”,发现定义一个指针时如果没有初始化,指针就会乱指向一个没有访问权限的内存位置,就导致了上述错误。

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么不能将交换函数中的临时变量定义为指针???

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信