利用指针对数组进行初始化

对一个数组进行初始化,使数组中的所有元素全部为0,这个操作是很简单的。最简便的方法就是在对数组进行定义时就对其初始化:

#include <stdio.h>
#define LEN 5
int main(){
    int arr[LEN] = {0};
    int i = 0;
    for(;i < LEN;i++)
        printf("%d ",arr[i]);
    printf("\n");
    return 0;
}

或者可以遍历数组,将数组中的每个元素都置为0。

#include <stdio.h>
#define LEN 5
int main(){
    int arr[LEN];
    int i = 0;
    for(;i < LEN;i++)
        arr[i] = 0;
    for(i = 0;i < LEN;i++)
        printf("%d ",arr[i]);
    printf("\n");
    return 0;
}

这个操作是C语言入门学习的知识,我们就不再赘述。今天我们来基于指针,实现对数组元素的初始化。这样做的目的在于通过数组初始化这个简单操作的实现,来帮助我们理解和理清学习指针的一些思路。

#include <stdio.h>

#define VALUE 5
int main(){
    int arr[VALUE];
    int *p;
    int i = 0;
    for(;i < VALUE;i++)
        printf("%d ",arr[i]);
    printf("\n");
    for(p = &arr[0];p < &arr[VALUE];){
        *p++ = 0;
    }
    for(i = 0;i < VALUE;i++)
        printf("%d ",arr[i]);
    printf("\n");
    return 0;
}

在上面这段程序中,我们定义了一个长度大小为5的整形数组,通过上面这种循环来实现数组的初始化。

for语句的初始部分把p指向了数组中的第一个元素:

                                    

这个例子中的指针运算是通过++运算符完成的。增加值1与int的长度相乘,其结果加到指针p上,经过第一次循环之后,指针在内存中的位置如下:

                                    

经过5次循环之后,p就指向了数组最后一个元素后面的那个内存位置:

                               

此时循环终止。由于数组的下标值从0开始,所以具有5个元素的数组的最后一个元素的下标值为4。这样,&arr[VALUE]表示数组最后一个元素后面那个内存位置的地址。当p到达这个值时,我们就知道到达了数组末尾,故循环终止。

这个例子中的指针最后所指向的位置是数组最后一个元素后面的那个内存地址。指针可能可以合法地获得这个值,但对它执行间接访问时将可能意外的访问原先存储于这个位置的变量。我们一般无法知道那个位置原先存储的是什么变量。因此,在这种情况下,一般不允许对指向这个位置的指针执行间接访问操作。



猜你喜欢

转载自blog.csdn.net/cecilia3333/article/details/80483370
今日推荐