C语言:指针与地址

来源:百度知道 编辑:UC知道 时间:2024/06/24 07:24:45
#include<string.h>
#include<stdio.h>

main()
{ float j=26.7,*p2;
int i=10,*p1;

p1=&i;
p2=&j;

printf("&j=%x,p2=%x,p2+1=%x\n",&j,p2,p2+1);

printf("&i=%x,p1=%x,p1+1=%x\n",&i,p1,p1+1);

}

输出结果中
1.为何j的地址比i大,不是j先定义,先分配存储空间,地址从小到大分配吗?
2.输出结果不是预期的,i为整型,p1+1,内存地址值应该增2,为何增4?
附上图片:

1、怎么分配空间的话,难说,好像没有规定一定从小到大分配的。
2、指针+1的时候,是增加了其所指向的类型的size(即用sizeof(类型)得到的值),sizeof(int)在32位机器中就是4,所以没有问题。