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

来源:2-1 Linux C语言 初始指针

nick_slade

2018-05-07 14:05

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

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

写回答 关注

2回答

  • 慕容1179891
    2021-02-24 11:27:14

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

  • nick_slade
    2018-05-07 14:29:39

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

Linux C语言指针与内存

指针-C语言的核心,代领大家对c语言有更加深刻的理解

116475 学习 · 250 问题

查看课程

相似问题