int a[8],*p1=a+2,*p2=a+7,s,s2;
s=p2-p1;/* s的值为5 也就是说 指针与指针间可以相减
那么 指针与指针可以相加吗?
例如:*/
s2=p2+p1
19 个解决方案
#1
可以啊,指针可以相加减.但注意范围
#2
肯定是可以的。不过注意覆盖底下的值
#3
啊~~ 刚才去调试了下
可是发现两个指针不能相加 提示: cannot add two pointers
可是发现两个指针不能相加 提示: cannot add two pointers
#4
要指向同一内容的才可以加~~~~
#5
#include<stdio.h>
int main()
{
int a[8]={9,7,5,3,1,0,8,6};
int *p1=a+2,*p2=a+7,s,s2; /* p1=5,p2=6*/
s=p2-p1;
printf("%d ",p1); /*088*/
printf("%d ",p2); /*108 */
/*s=(108-88)/(sizeof(int));*/
printf("%d",s);
}
就这么简单
#6
注意,在C文件的情况下编译
#7
是指向同一个数组了啊...
相减就没问题,相加就有问题了..
相减就没问题,相加就有问题了..
#include <stdio.h>
int main()
{int a[8]={0,1,2,3,4,5,6,7},*p1=a+2,*p2=a+4,s,s2;
s=p2-p1;
s2=p2+p1;
printf("%d,%d\n",s,s2);
getchar();
return 0;
}
#8
#include<stdio.h>
int main()
{
int a[8]={9,7,5,3,1,0,8,6};
int *p1=a+2,*p2=a+7,s,s2; /* p1=5,p2=6*/
s=(int)p2+(int)p1;
printf("%d ",p1);
printf("%d ",p2);
printf("%d",s);
}
p2和p1体现的是地址,要经过转化才行
减法情况下体现出偏移的差值
#9
哦 这样啊..
那为什么 相减就不用转化了啊?
那为什么 相减就不用转化了啊?
#10
相减也可以阿,你看到上面你相减的时候不是真实的地址数值相减了吗?
情况下就是地址数值差了,所以加不加类型强转还是不一样的
s=(int)p2-(int)p1;
情况下就是地址数值差了,所以加不加类型强转还是不一样的
#11
哦 ,明白了 谢谢
#12
指针开平方
#13
指针与指针不能相加。不管是不是同类型的指针。
两个对象是否能进行如:"+","-","*","/"等运算,要看它是否重载了这些运算符。
就算重载了,也要看它的参数是什么。
指针重载了“+”运算符,但参数是整数,而不是另一个指针!
不同类型的指针"+1"所作操作是不一致的,主要看它们所指的类型的单位大小来决定具体加多少。
那各位想象,指针+指针会得出什么??
两个对象是否能进行如:"+","-","*","/"等运算,要看它是否重载了这些运算符。
就算重载了,也要看它的参数是什么。
指针重载了“+”运算符,但参数是整数,而不是另一个指针!
不同类型的指针"+1"所作操作是不一致的,主要看它们所指的类型的单位大小来决定具体加多少。
那各位想象,指针+指针会得出什么??
#14
忘了说,指针和指针可以相减,得到的是两地址之间的差。可以用来计算数组的大小等。
但相加却没有实际意义。
但相加却没有实际意义。
#15
int=pointer-pointer<->pointer=pointer+int
#16
相加却没有实际意义
这个说的好~~ 我试了,觉得是没什么意义
这个说的好~~ 我试了,觉得是没什么意义
#17
13 楼说的有道理啊
指针与指针不能相加。不管是不是同类型的指针。
s=(int)p2-(int)p1;
此时的 p2 和p1 已经被转化成数值了~~
谢谢各位热心的帮助~~
指针与指针不能相加。不管是不是同类型的指针。
s=(int)p2-(int)p1;
此时的 p2 和p1 已经被转化成数值了~~
谢谢各位热心的帮助~~
#18
是指向同一个数组了啊...
相减就没问题,相加就有问题了..
-------------------------------------
其实不然,随便指向哪里都可以!只要把指针的值当作整数来处理就行了!
相减就没问题,相加就有问题了..
-------------------------------------
其实不然,随便指向哪里都可以!只要把指针的值当作整数来处理就行了!
#include <stdio.h>
int main()
{
int a=11;
float b=22;
int *pi=&a;
float *pf=&b;
int result;
result=(int)pi-(int)pf; //将两个指针变量的值转换为整数值参与运算
printf("%d\n",result);
return 0;
}
#19
支持14楼的说法
并补充一下
(相同类型的)指针可以相减
并补充一下
(相同类型的)指针可以相减
#20
#1
可以啊,指针可以相加减.但注意范围
#2
肯定是可以的。不过注意覆盖底下的值
#3
啊~~ 刚才去调试了下
可是发现两个指针不能相加 提示: cannot add two pointers
可是发现两个指针不能相加 提示: cannot add two pointers
#4
要指向同一内容的才可以加~~~~
#5
#include<stdio.h>
int main()
{
int a[8]={9,7,5,3,1,0,8,6};
int *p1=a+2,*p2=a+7,s,s2; /* p1=5,p2=6*/
s=p2-p1;
printf("%d ",p1); /*088*/
printf("%d ",p2); /*108 */
/*s=(108-88)/(sizeof(int));*/
printf("%d",s);
}
就这么简单
#6
注意,在C文件的情况下编译
#7
是指向同一个数组了啊...
相减就没问题,相加就有问题了..
相减就没问题,相加就有问题了..
#include <stdio.h>
int main()
{int a[8]={0,1,2,3,4,5,6,7},*p1=a+2,*p2=a+4,s,s2;
s=p2-p1;
s2=p2+p1;
printf("%d,%d\n",s,s2);
getchar();
return 0;
}
#8
#include<stdio.h>
int main()
{
int a[8]={9,7,5,3,1,0,8,6};
int *p1=a+2,*p2=a+7,s,s2; /* p1=5,p2=6*/
s=(int)p2+(int)p1;
printf("%d ",p1);
printf("%d ",p2);
printf("%d",s);
}
p2和p1体现的是地址,要经过转化才行
减法情况下体现出偏移的差值
#9
哦 这样啊..
那为什么 相减就不用转化了啊?
那为什么 相减就不用转化了啊?
#10
相减也可以阿,你看到上面你相减的时候不是真实的地址数值相减了吗?
情况下就是地址数值差了,所以加不加类型强转还是不一样的
s=(int)p2-(int)p1;
情况下就是地址数值差了,所以加不加类型强转还是不一样的
#11
哦 ,明白了 谢谢
#12
指针开平方
#13
指针与指针不能相加。不管是不是同类型的指针。
两个对象是否能进行如:"+","-","*","/"等运算,要看它是否重载了这些运算符。
就算重载了,也要看它的参数是什么。
指针重载了“+”运算符,但参数是整数,而不是另一个指针!
不同类型的指针"+1"所作操作是不一致的,主要看它们所指的类型的单位大小来决定具体加多少。
那各位想象,指针+指针会得出什么??
两个对象是否能进行如:"+","-","*","/"等运算,要看它是否重载了这些运算符。
就算重载了,也要看它的参数是什么。
指针重载了“+”运算符,但参数是整数,而不是另一个指针!
不同类型的指针"+1"所作操作是不一致的,主要看它们所指的类型的单位大小来决定具体加多少。
那各位想象,指针+指针会得出什么??
#14
忘了说,指针和指针可以相减,得到的是两地址之间的差。可以用来计算数组的大小等。
但相加却没有实际意义。
但相加却没有实际意义。
#15
int=pointer-pointer<->pointer=pointer+int
#16
相加却没有实际意义
这个说的好~~ 我试了,觉得是没什么意义
这个说的好~~ 我试了,觉得是没什么意义
#17
13 楼说的有道理啊
指针与指针不能相加。不管是不是同类型的指针。
s=(int)p2-(int)p1;
此时的 p2 和p1 已经被转化成数值了~~
谢谢各位热心的帮助~~
指针与指针不能相加。不管是不是同类型的指针。
s=(int)p2-(int)p1;
此时的 p2 和p1 已经被转化成数值了~~
谢谢各位热心的帮助~~
#18
是指向同一个数组了啊...
相减就没问题,相加就有问题了..
-------------------------------------
其实不然,随便指向哪里都可以!只要把指针的值当作整数来处理就行了!
相减就没问题,相加就有问题了..
-------------------------------------
其实不然,随便指向哪里都可以!只要把指针的值当作整数来处理就行了!
#include <stdio.h>
int main()
{
int a=11;
float b=22;
int *pi=&a;
float *pf=&b;
int result;
result=(int)pi-(int)pf; //将两个指针变量的值转换为整数值参与运算
printf("%d\n",result);
return 0;
}
#19
支持14楼的说法
并补充一下
(相同类型的)指针可以相减
并补充一下
(相同类型的)指针可以相减