malloc()函数问题

来源:百度知道 编辑:UC知道 时间:2024/05/09 18:42:09
第一段代码:
int main()
{
int *p=NULL;
p=(int *)malloc(sizeof(int)*5);
if(p==NULL) {printf("malloc error\n"); return -1;}
int i=0;
for(i=0;i<6;i++)
*p++=i; //为什么我给数组赋值,确赋不上呢?而在第二段代码中用p[i]形式可以赋值成功?
for(i=0;i<5;i++)
printf("%d\n",*p++);
return 0;
}

第二段代码:
int main()
{
int *p=NULL;
p=(int *)malloc(sizeof(int)*5);
if(p==NULL) {printf("malloc error\n"); return -1;}
int i=0;
for(i=0;i<6;i++)
p[i]=i;
for(i=0;i<5;i++)
printf("%d\n",p[i]);
return 0;
}

for(i=0;i<6;i++)
*p++=i; /*赋值以后 指针 p 的位置已经移动了*/
for(i=0;i<5;i++)
printf("%d\n",*p++); /*这里再这样取值就是从开始位置向后移动 6次以后的位置*/

int main()
{
int *p=NULL, *p1;
p=(int *)malloc(sizeof(int)*5);
if(p==NULL) {printf("malloc error\n"); return -1;}
p1 = p;
int i=0;
for(i=0;i<6;i++)
*p++=i;
for(i=0;i<5;i++)
printf("%d\n",*p1++);
return 0;
}

第一段代码中,在结束了第一次循环后,指针p已经移到了初始位置后六位了,然后开始第二次循环时,又接着往后移动,当然输出结果不对了,你应该这样改。
int main()
{
int *p=NULL,*p1;
p=(int *)malloc(sizeof(int)*5);
p1=p;
if(p==NULL) {printf("malloc error\n"); return -1;}
int i=0;
for(i=0;i<6;i++)
*p++=i; p=p1;
for(i=0;i<5;i++)
printf("%d\n",*p++);
return 0;
}。第二段代码使用的是数组,赋值采用了*(p+i)=i的方式,而不是第一段代码中p=p+i;