指针数组指针自增

发布时间:2024-05-18 21:41 发布:上海旅游网

问题描述:

我是个菜鸟,刚刚学习C,对指针很多不懂,能不能请大虾看看我这一小段程序?我的本意是输入5个数字,之后打出5个数字,可是我弄不清楚怎么通过指针来做?
#include<stdio.h>
#include<stdlib.h>
void main()
{
int * aq;
int i=0;
aq=(int *)malloc(5*sizeof(int));
while(i<5)
{
scanf("%d",aq);
aq++;
i++;
}
i=0;
while(i<5)
{
printf("%d",*aq);
aq++;
i++;
}
}

问题解答:

你这个程序的问题出在最后一个循环中的printf("%d",*aq);
要知道,此时的aq已经在上一个循环中被递增过了,因此在后面一个while循环之前应该
重置aq,也就是让aq指向刚刚分配过的内存的起始位置。最简单的办法是声明aq时,同时声明一个辅助指针temp_aq,代码如下:
void main()
{
int * aq;
int *temp_aq; /*声明一个辅助指针,用来保存aq的初始值*/
int i=0;
temp_aq=aq=(int *)malloc(5*sizeof(int));
while(i<5)
{
scanf("%d",aq);
aq++;
i++;
}
i=0;
aq=temp_aq; /*使aq指向分配的内存区的首地址,通过temp_aq*/
while(i<5)
{
printf("%d",*aq);
aq++;
i++;
}
free(temp_aq); /*释放内存*/
aq=temp_aq=NULL; /*防止指针悬空*/
}

aq 没有释放 (free)
而且 aq 被改变了,想free 也不行了。
而且前面5次 ++, 后面还要++, 越界错误!

热点新闻