在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;
} 展开
{
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;
} 展开
展开全部
1、可以。有的编译器会有警告,有的会报错。但强制转换后是可以的,指针变量本身就是内存的地址。
2、例如:
int n =99;
int *p1 = &n;
int m = (int)p1;
int *p2 = (int*)m;
这时p2就和p1是一样的,就是需要强制转换
2、例如:
int n =99;
int *p1 = &n;
int m = (int)p1;
int *p2 = (int*)m;
这时p2就和p1是一样的,就是需要强制转换
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
temp=*p1;
//
这不是把指针赋给了整形变量,而是把这个指针指向的整数值赋给了整形变量。
*
是解引用操作符,这个是基本概念,你还是好好看看书吧
//
这不是把指针赋给了整形变量,而是把这个指针指向的整数值赋给了整形变量。
*
是解引用操作符,这个是基本概念,你还是好好看看书吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
打个酱油
这个是传值操作,因此无法实现形参向实参的传递
无论什么类型的指针变量都是占四个字节的,其值是一个占四个字节的数据,因此使用四个字节的变量就可以对其值进行存储,但是在C++中一般会采用long通过强制转换的方式来存储指针的值。将指针值赋值给整型变量可能由于编译器的不同而存在风险。
追问
但由于函数调用的单向传递性,不能够实现数值的交换!无法实现交换数值的初衷,所以光传指针的值是有问题的。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我印象中可以赋值,但是可能会不是完整的指针地址值,一般需要强制转换下,指针一般是long型的32位,int是16位的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询