加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么这个C指针代码不起作用?

发布时间:2020-12-16 10:54:52 所属栏目:百科 来源:网络整理
导读:在这里完成C newb.试图通过弄乱简单的代码片段来学习/理解指针. #include stdio.hvoid swap(int *px,int *py){ int tmp; tmp = *px; *px = *py; *py = tmp;}main(){ int *a,*b; *a = 1; *b = 2; swap(a,b); printf("%d %dn",*a,*b);} 为什么这无效?当我从m
在这里完成C newb.试图通过弄乱简单的代码片段来学习/理解指针.

#include <stdio.h>

void swap(int *px,int *py)
{
    int tmp;
    tmp = *px;
    *px = *py;
    *py = tmp;
}

main()
{
    int *a,*b;
    *a = 1;
    *b = 2;
    swap(&a,&b);
    printf("%d %dn",*a,*b);
}

为什么这无效?当我从main中删除解除引用运算符*时,代码有效.

从概念上讲,这似乎应该有效.我将a和b初始化为指针,分别指向int 1和int 2.然后我将他们的地址发送到swap(),它应该切换他们指向的地址.

解决方法

有几个问题.首先,指针a和b没有指向有效的内存.因此,未定义整数值的赋值(可能崩溃).其次,调用swap(假设a和b指向有效内存)不应该包含地址(它当前正在发送指针变量的地址).

以下更改将使其工作:

int a,b;
a = 1;
b = 2;
swap(&a,&b);
printf("%d %dn",a,b);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读