小问题:将一组数逆序存储

做了道题,给定一个数组,将其中的元素逆序存放。

这道题说来简单,可以用指针写,也可以用数组下标来实现。但是在我用指针实现的时候却出了一点问题

下面是指针方式的代码:

#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]);
}*/

猜你喜欢

转载自blog.csdn.net/Mr_H9527/article/details/80084939
今日推荐