You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中使用指针填充数组求助(禁止使用下标访问)

问题分析与解决

你的代码核心问题是误用了二级指针,导致指针操作完全偏离了数组内存区域。

为什么原来的代码只修改了第一个元素?

函数参数int *arr已经是指向数组首元素的一级指针,你却取它的地址赋值给二级指针int **elementOfArray = &arr;——这里的&arr指向的是函数栈帧里的arr参数变量本身,不是数组的内存。当你递增elementOfArray时,其实是在遍历栈上的其他局部变量内存,完全和数组无关,只有第一次赋值能碰巧修改到数组首元素,后续操作都是在修改无关内存。

修正后的基础填充代码(用一级指针)

直接用一级指针操作数组即可,不需要二级指针:

#include <stdio.h>

#define MAX_SIZE 10

void initializeArray(int *arr) {
    int *elementOfArray = arr; // 让指针指向数组首元素
    for (int i = 0; i < MAX_SIZE; ++i) {
        *elementOfArray = 22;  // 解引用指针,给当前元素赋值
        elementOfArray++;      // 指针向后移动一个int大小的位置,指向数组下一个元素
    }
}

int main() {
    int arr[MAX_SIZE];
    initializeArray(arr); // 数组名本身就是首元素指针,直接传递即可

    // 打印验证
    int *printPtr = arr;
    for (int i = 0; i < MAX_SIZE; ++i) {
        printf("%d ", *printPtr);
        printPtr++;
    }
    return 0;
}

满足作业要求:无重复随机数填充(仅用指针)

用Fisher-Yates洗牌算法生成无重复随机数,全程不使用下标[i]:

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

#define MAX_SIZE 10

void fillUniqueRandom(int *arr) {
    // 第一步:填充0到MAX_SIZE-1的有序序列
    int *ptr = arr;
    for (int i = 0; i < MAX_SIZE; ++i) {
        *ptr = i;
        ptr++;
    }

    // 第二步:Fisher-Yates洗牌,生成无重复随机数组
    srand((unsigned int)time(NULL));
    ptr = arr + MAX_SIZE - 1; // 指向数组最后一个元素
    for (int i = MAX_SIZE - 1; i > 0; --i) {
        int randomPos = rand() % (i + 1);
        // 交换当前指针指向的元素和随机位置的元素
        int temp = *(arr + randomPos);
        *(arr + randomPos) = *ptr;
        *ptr = temp;
        ptr--; // 指针向前移动一位
    }
}

int main() {
    int arr[MAX_SIZE];
    fillUniqueRandom(arr);

    // 指针遍历打印结果
    int *printPtr = arr;
    printf("生成的无重复随机数组:");
    while (printPtr < arr + MAX_SIZE) {
        printf("%d ", *printPtr);
        printPtr++;
    }
    printf("\n");
    return 0;
}

关键指针操作说明

  • 数组名arr传递给函数时,会自动转换为指向首元素的一级指针,无需额外取地址。
  • ptr++:指针向后移动一个int的大小(因为指针类型是int*),正好指向数组的下一个元素。
  • arr + n:指针加法,直接计算出数组第n个元素的地址(等价于&arr[n],但这里没有使用下标)。

内容的提问来源于stack exchange,提问作者Ricardo Roel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 06:25:34