指针加法运算..
//pnt_add.c --指针加法
#include <stdio.h>
#define SIZE 4
int main(void)
{
short dates [SIZE];
short * pti;
short index;
double bills[SIZE];
double * ptf;
pti =dates;//把数组地址赋给指针
printf( "%23s %10s\n ", "short ", "double ");
for(index =0;index <SIZE;index ++)
printf( "pointers + %d: %10p\n ",
index,pti + index,ptf + index);
return 0;
}
输出结果如下:
short double
pointers + 0: 0x0064fd20 Oxoo64fd28
pointers + 1: 0x0064fd22 Oxoo64fd30
pointers + 2: 0x0064fd24 Oxoo64fd38
pointers + 3: 0x0064fd26 Oxoo64fd40
求输出解释 。为什么 double 类型指针+1后会增加2个位或8个位.....初学者 多谢 !...
[解决办法]
int *p;
p++;//p会增加sizeof(int), 这么加的原因是为了指向p的下一个int
[解决办法]
这样跟你说吧,指针有类型吧,指针的运算加的不是数值而是类型的宽度。
如:
int *a, *b;
b = a +1; 实际上是 a + (1 * sizeof(int));
char *x, *y;
y = x + 4; 实际上就是 y + (4 * sizeof(char))
至于int的宽度,这和cpu字长,编译器等有关。不同的地方有些出入
[解决办法]
lz,那不是加2个位,十六进制加法,,,0x10-0x8 = 8
[解决办法]
十六进制
8+8=10
[解决办法]
给个参考:
公元纪年,以1年为一个单位,现在是2012年,明年是2013年,。。。。
设2000年时开办一个全国性的竞赛,每4年一届,。。。。
首届(与人们的习惯不同,我们称为第0届)之后,下一届是第几届?是哪一年?
是2000+1?
还是2000+1*(4)?
这里就是1是一年还是一届的长度的差别!
[解决办法]
"差2"是因为 10-8
这里是十六进制 不是 10 而是 16-8 差8 ,清楚了吧