做了道题,给定一个数组,将其中的元素逆序存放。
这道题说来简单,可以用指针写,也可以用数组下标来实现。但是在我用指针实现的时候却出了一点问题
下面是指针方式的代码:
#include<stdio.h>
#define N 5
int main()
{
int i,*temp;
int ar[N] = {8,4,5,3,1};
int *x = ar;
int *y = &ar[N-1];
while(x<y)
{
*temp = *x;
*x = *y;
*y = *temp;
x++;
y--;
}
for(i=0;i<N;i++)
printf("%d",ar[i]);
}
有没有,看出哪里有什么不对的地方?
对于像我这样的初学者来说,这个问题或许是一个 比较棘手的问题,我们在编译这个代码的时候,系统并不会提示错误,
但是运行的时候就会出问题了。
这是为什么呢?大家有没有注意到,在我定义这个*temp指针时,并未对其进行初始化,而在c语言中,未被初始化的指针
会被系统默认指向内核区,内核区是用户无法访问的区域,因此在执行交换时就会出错。
这里我们只需要将它指向一个变量的地址(即对其进行初始化)就行。
下面是用下标方式的代码,建议初学者使用,查错方便 :
/*#include<stdio.h>
#define N 5
int main()
{
int i = 0,j = N-1,temp;
int ar[N] = {8,4,5,3,1};
int x = ar[0];
int y = ar[N-1];
while(i<j)
{
temp = ar[j];
ar[j] = ar[i];
ar[i] = temp;
i++;
j--;
}
for(i=0;i<N;i++)
printf("%d ",ar[i]);
}*/