首页 > 解决方案 > 带数组的指针算术

问题描述

我正在尝试用 C 编写一个简单的程序,将元素存储在指针中。当我打印数组的元素时,我得到了垃圾值。

这是代码:

#include <stdio.h>
#include <stdlib.h>

#define MAX 5

int main(int argc, char const *argv[]) {

    int* a = (int*)malloc(MAX * sizeof(int));
    int* b = NULL;
    int* const maxAddress = a + MAX;

    if(a != NULL) {
        for(int index = 0; b = a, b < maxAddress; index++) {
            *(a + index) = index;
            printf("Value: %d, Index: %d\n", *(a + index), index);
            a++;
        } 
    }   

    printf("\n\n");

    for(int index = 0; index < MAX; index++) // Getting junk values here
        printf("Index: %d, Value: %d, Address: %p\n", index, *(a + index), a + index);

    return 0;
}

标签: cpointersmath

解决方案


你有两个独立的增量正在进行。在 for 循环中执行index++,而在循环结束时递增a++。这意味着您的第一个写入是 to a[0],您的下一个是 toa[1 + 1]等等。基本上,您正在跳过所有其他元素。

为了避免这样做增量aindex,但不是两者兼而有之。由于您希望 的值index不断提高,因此我建议删除该行a++.

该变量b只在循环开始时才使用,因此条件b = a, b < maxAddress似乎毫无意义。可以写成a < maxAddress。如果我有这样的猜测,b则在更完整的代码版本中使用以保留a下一次迭代的先前值。


推荐阅读