纸扎四合院图片大全:C语言指针问题

来源:百度文库 编辑:高考问答 时间:2024/04/26 13:03:38
下面这个程序能不能对两个整型值进行交换:
main()
{ int *a=0,*b=0;
*a=10,*b=20;
swap(a,b);
printf("%d%d\n",*a,*b);
}
swap(int *p,int *q)
{ int t;
t=*p; *p=*q; *q=t;
}
麻烦再帮我把每行具体解释一下吧!!看不大明白谢谢了!!

main()
{ int *a=0,*b=0; /* 将a,b两个指针赋值为空指针 */
*a=10,*b=20; /* 从这里开始关于a,b的运算错误 原因是a,b未赋值*/
swap(a,b);
printf("%d%d\n",*a,*b);
}
swap(int *p,int *q)
{ int t;
t=*p; *p=*q; *q=t;
}

正确的应该是

main()
{ int *a,*b,m,n;
a=&m,,b=&n;
*a=10,*b=20;
swap(a,b);
printf("%d%d\n",*a,*b);
}
swap(int *p,int *q)
{ int t;
t=*p; *p=*q; *q=t;
}

可以的, 因为是改的是内存地址上的数值, 所以swap的结果可以传到main()中。

可以完成交换.但是如此定此指针变量会导致很多不确定因素.会出现一些莫名其妙的错误

同意回答者:zhiqiang124的说法。

另外说一下,C/C++一般不能将一个指针指向一个常量,,比如你程序中:

int *a=90;

这个是不允许的,你只能将一个指针指向一个已经存在的变量,当然还有一个方法能达到相似目的,不过这个也许和C没有什么关联,但还是奉上:

int *a=new int(90);

这样就可以交换。