c语言 指针地址计算

来源:百度知道 编辑:UC知道 时间:2024/06/02 12:17:34
我是新人 呵呵
#include<stdio.h>
#include<alloc.h>
void main()
{int y,i;
long int x,z;
float *p,*p2,*p3,*p4,*p5;
p=(float *)malloc(2);
x=19641;//29282;
z=4*x;
p2=p+x;
p3=p+z;
z+=x;
p4=p+z;
p5=p4+z;
printf("\n\tp=%ld\tp2=%ld\tp3=%ld\n\tp4=%ld\tp5=%ld\n",p,p2,p3,p4,p5);
free(p);
}

运行结果:

p=368377860 p2=368390888 p3=368429972
p4=368443000 p5=368442604

为什么p4+z后的p5比p4小??
难道是因为z是长整形??
怎样使运行结果正确??
我用的是TC3.0
我想要申请一个比较长的空间来存放数剧,通过这种计算来存取后面的数剧
我当时用malloc申请成功了,但在存的时候,末明其妙的把前面的数剧清掉,后来试了几遍才、才发现这个问题

不大清楚问题出现在哪里,但是我这正常,呵.
要不重启下电脑[目的为了清下内存]再试试,个人觉得TC3.0不至于出现这种错误.

申请大空间存储数据,直接申请就行了,能申请成功就能检索的吧.

------------
不应该的.

说明下编译环境,刚测试过,我这Ubuntu+GCC4.1.3正常.

把所有的p前面加上*,你打印的是指针地址不是指针指向的内容

是吗?为什么我用VC编译运行的结果是
p=3608544 p2=3687108 p3=3922800
p4=4001364 p5=4394184

内存中的地方又不是全空着,完全在于编译器怎么做。你一次性申请个大数组再进行数组里面的地址运算比较有意义。

有些编译器是支持16位的有些支持32(VC)