c语言指针交换

[复制链接]
查看11 | 回复5 | 2013-1-22 11:45:19 | 显示全部楼层 |阅读模式
这个是这样的,因为指针变量一般就是32位的长度,同样int类型也是32位的长度,p1里面的地址也是能放在p里面存储的(char ,short类型就不行了)。但是对于编译器来说,存放在p里面,他就认为是一个整数,所以就不能做一些指针的操作了,比如*p。但是如果只是向你这种只是简单交换一下值是没问题的。...
回复

使用道具 举报

千问 | 2013-1-22 11:45:19 | 显示全部楼层
int *p1,*p2,*p;p=p1;p1=p2;p2=p;这个是理论上最合理的写法,交换指针变量的值,让他们指向的变量交换。 但实际上,在计算机中,地址就是一个32位二进制的数,存的是一个变量在内存中的地址,你会发现sizeof(char *),sizeof(int *)和sizeof(double *)的值都是一样的,是4....
回复

使用道具 举报

千问 | 2013-1-22 11:45:19 | 显示全部楼层
int *p1,*p2,p;p1 ,p2 是一个指针, 例如:int *p1 ,p;p = 100;p1 = &p;p1 是指向一个Int类型变量,p1,的内容是所指变量p的地址, 即p在内存中地址, 如果P的内内存地址是0xffff11aa, 那p1的数值是 0xffff11aa, *p1 是取得该变量的数值, ...
回复

使用道具 举报

千问 | 2013-1-22 11:45:19 | 显示全部楼层
不可以的~如果你的编译器能通过编译,那建议你赶快换个编译器吧指针交换中间值一定要是指针类型,指针储存的是一个16进制的地址,整型就是储存整数,两者不能进行自动类型转换的!如果你非要这样写,其实也是可以的,不过要强制类型转换(麻烦?):int main(int argc, char **argv){
int *p1, *p...
回复

使用道具 举报

千问 | 2013-1-22 11:45:19 | 显示全部楼层
指针就是指针类型,是指向存放内容的首地址的,假如地址0X2000的地方存了一个整形数23。那么整形指针指向的指针地址就是0x2000 也就是P=0x2000。*p=0x23;P存放的是地址。指针交换肯定要同类型的,也可以强制转换,那意义就不一样了,你可以P=(int*)0x3000;说明地址P已经指向0X3000的地方了。*P 就是指向0x3000里面的内容...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行