指针的一些运算

IlikeEnglish 2007-10-21 03:45:37
int * p;
int k;
p=&k;
p=p&0xfffffffe;

指针为什么没有&运算
...全文
199 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
acrobatyuer 2007-10-21
  • 打赏
  • 举报
回复
对于指针要想互相进行加减运算的话应该先去考虑下两上指针指向的是不是同一类型的数据,如果int和char型指针进行运算会产生你意想不到的结果的,因为它们所指向的内存模型不同,所以对于这类运算应该多注意些吧
PcrazyC 2007-10-21
  • 打赏
  • 举报
回复
指针之间不一定能相减,只有相同类型的指针可以相加减,(int *)和(float *)肯定不行

相减后所得到的结果是该指针单元所占空间的倍数,也就是得到两个指针之间有多少个这样的空间,得到的是一个整数,而不是两个指针的差值,同样的道理指针与一个整数相减,减去的数为该指针所占空间的整数倍,而不是该整数本身.

运行下面的程序就知道了


#include<stdio.h>

int main()
{
int *pa,*pb,a=1,b=3;
double *pc,c=2;
pa=&a;
pb=&b;
pc=&c;
printf("%d\n",pa-pb);
// printf("%d\n",pc-pa); //这句代码错误
printf("%d\n",pa);
printf("%d\n",pa+1);
printf("%d\n",pc);
printf("%d\n",pc+1);
return 0;
}
chen_liang747703 2007-10-21
  • 打赏
  • 举报
回复
2楼分析的好!
学习!
yang7 2007-10-21
  • 打赏
  • 举报
回复
不好意思! 搞错了
同意九楼的说法
嘿嘿
yuan154 2007-10-21
  • 打赏
  • 举报
回复
楼上说的是
能不给每种合法用法一个例子呢,有点不太懂
leozzb 2007-10-21
  • 打赏
  • 举报
回复
if (p-a[i]%4==0)
楼上的,你的这一句是要做什么呢?我觉得改成这样好一些
if ((p-&a[i])%4==0)
yang7 2007-10-21
  • 打赏
  • 举报
回复
给你看一个例子你就知道两个指针相减是怎么回事了:
#include <stdio.h>
main()
{ int *p,i;
int a[12]={0,1,2,3,4,5,6,7,8,9,10,11};
p=a;
for(i=0;i<=11;i++)
{

if (p-a[i]%4==0)
printf("%d",a[i]);
printf("\n");
}
}
意思是一样的,楼主慢慢体会吧!哈哈哈....
leozzb 2007-10-21
  • 打赏
  • 举报
回复
指针的合法运算:
1,指针和整数:加法,减法
2,同数组的指针和指针:减法
3,指针赋0值或与0值比较
4,同类型指针之间的赋值运算(两指针有一个是void*类型的除外)

其它都为非法.
leozzb 2007-10-21
  • 打赏
  • 举报
回复
指针和指针可以进行"减法"运算.
如q-p+1
得出两个指针之间元素数目.
leozzb 2007-10-21
  • 打赏
  • 举报
回复
指针和指针可以进行运算.
如q-p+1
得出两个指针之间元素数目.
IlikeEnglish 2007-10-21
  • 打赏
  • 举报
回复
谢谢楼上。那为什么两个指针可以直接相减?而不用类型转换?
IlikeEnglish 2007-10-21
  • 打赏
  • 举报
回复
谢谢楼上。那为什么两个指针直接相减?
PcrazyC 2007-10-21
  • 打赏
  • 举报
回复
你范了两个错误:

1.你将一个指针直接当成整形数据来使用,这是错误的,指针虽然是一个整形数据,但使用的时候必须进行强制转换后才能当作整形数据使用,&运算符的两边必须都是整型数据(字符变量也可进行转换),所以必须对P进行一下强制转换(int)p&0x....;

2.你把一个整形数据直接赋值给一个指针变量,这也要进行一下强制转换.p=(int *)....;

所以最后一句应改为p=(int*)((int)p&0xfffffffe);
IlikeEnglish 2007-10-21
  • 打赏
  • 举报
回复
上面程序的错误出在哪里?

69,370

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧