在c语言中整形变量的指针能否赋值给整形变量?

swap(int*p1,int*p2){inttemp;temp=p1;p1=p2;p2=temp;}main(){inta,b;int*pointer1,*pointe... swap(int *p1,int *p2)
{
int temp;
temp=p1;
p1=p2;
p2=temp;
}
main()
{
int a,b;
int *pointer1,*pointer2;
scanf("%d%d",&a,&b);
pointer1=&a,pointer2=&b;
if(a<b) swap(pointer1,pointer2);
printf("\n%d%d\n",a,b);
}
对于这个程序,实参传给形参的是两个指针,而当形主函数调用swap函数后,函数内却把指针直接赋给了整形变量
已解决:
swap(int *p1,int *p2)
{
int temp;
temp=p1;
p1=p2;
p2=temp;
}
这样交换地址是可以的,但是函数调用的单向传递性,不能够实现数值的交换!
故这样是错误的!
正确如下:
swap(int *p1,int *p2)
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
展开
 我来答
倪兴延燕
2019-02-28 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.2万
采纳率:34%
帮助的人:1909万
展开全部
*p1
这并不是指针。。。而是指针所指向的值,temp=*p1即把这个指针所指向的值赋值给一个临时变量
都是同一类型;
指针变量的值是指针,指针就是地址;指针变量指向的变量就不是地址了,而是一个具体的变量。
如:int
*ptr;
ptr才是指针,即ptr为指针变量
其实是一个地址,*ptr为指针变量的值,而且指针的类型是int
*
tattackor
推荐于2017-09-05 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:883万
展开全部
1、可以。有的编译器会有警告,有的会报错。但强制转换后是可以的,指针变量本身就是内存的地址。
2、例如:
int n =99;
int *p1 = &n;
int m = (int)p1;
int *p2 = (int*)m;
这时p2就和p1是一样的,就是需要强制转换
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
褒实营画
2019-11-12 · TA获得超过3.8万个赞
知道大有可为答主
回答量:1.2万
采纳率:35%
帮助的人:1165万
展开全部
temp=*p1;
//
这不是把指针赋给了整形变量,而是把这个指针指向的整数值赋给了整形变量。
*
是解引用操作符,这个是基本概念,你还是好好看看书吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Soucula
推荐于2017-10-01 · TA获得超过3091个赞
知道小有建树答主
回答量:744
采纳率:93%
帮助的人:70.2万
展开全部

打个酱油

  1. 这个是传值操作,因此无法实现形参向实参的传递

  2. 无论什么类型的指针变量都是占四个字节的,其值是一个占四个字节的数据,因此使用四个字节的变量就可以对其值进行存储,但是在C++中一般会采用long通过强制转换的方式来存储指针的值。将指针值赋值给整型变量可能由于编译器的不同而存在风险。

追问
但由于函数调用的单向传递性,不能够实现数值的交换!无法实现交换数值的初衷,所以光传指针的值是有问题的。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
战诗CJ
2013-08-29 · TA获得超过105个赞
知道答主
回答量:23
采纳率:0%
帮助的人:12.4万
展开全部
我印象中可以赋值,但是可能会不是完整的指针地址值,一般需要强制转换下,指针一般是long型的32位,int是16位的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式