在c语言中整形变量的指针能否赋值给整形变量?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在c语言中整形变量的指针能否赋值给整形变量?相关的知识,希望对你有一定的参考价值。
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;
这并不是指针。。。而是指针所指向的值,temp=*p1即把这个指针所指向的值赋值给一个临时变量
都是同一类型;
指针变量的值是指针,指针就是地址;指针变量指向的变量就不是地址了,而是一个具体的变量。
如:int
*ptr;
ptr才是指针,即ptr为指针变量
其实是一个地址,*ptr为指针变量的值,而且指针的类型是int
* 参考技术A 1、可以。有的编译器会有警告,有的会报错。但强制转换后是可以的,指针变量本身就是内存的地址。
2、例如:
int n =99;
int *p1 = &n;
int m = (int)p1;
int *p2 = (int*)m;
这时p2就和p1是一样的,就是需要强制转换 参考技术B temp=*p1;
//
这不是把指针赋给了整形变量,而是把这个指针指向的整数值赋给了整形变量。
*
是解引用操作符,这个是基本概念,你还是好好看看书吧 参考技术C
打个酱油
这个是传值操作,因此无法实现形参向实参的传递
无论什么类型的指针变量都是占四个字节的,其值是一个占四个字节的数据,因此使用四个字节的变量就可以对其值进行存储,但是在C++中一般会采用long通过强制转换的方式来存储指针的值。将指针值赋值给整型变量可能由于编译器的不同而存在风险。
但由于函数调用的单向传递性,不能够实现数值的交换!无法实现交换数值的初衷,所以光传指针的值是有问题的。
本回答被提问者和网友采纳 参考技术D 我印象中可以赋值,但是可能会不是完整的指针地址值,一般需要强制转换下,指针一般是long型的32位,int是16位的。C语言中的整型变量是啥意思?求详解
整型变量,即整数型变量。
包括有符号整数和无符号整数,从数据长度上分,包括短整数、整数、长整数。
标准整数类型为int
一般只说整形,通常是指这个,但其它整数类型也在简称整形变量的范围之内。
包括的关键字有:
short
int
long
unsigned
其它常见的内置变量类型还有很多,例如:
unit
:
unsigned
int
long
:
long
int
word:
unsigned
short
int
dword:
unsigned
long 参考技术A c语言一共有4中类型,整形,浮点型,指针类型和聚合类型,整形变量的意思是他的变量只能取整数,包括字符、短整型,整形和长整形四种。
以上是关于在c语言中整形变量的指针能否赋值给整形变量?的主要内容,如果未能解决你的问题,请参考以下文章
C语言指针问题,我这样想利用pointpointer改变pointer,使pointer指向整形变量number2,可是最终运行不对