首页 > 解决方案 > 当通过函数作为参数传递数组时,数组是否索引为零?C 编程

问题描述

当它们通过函数作为参数传递时,数组零索引吗?还是 C 只是将数组 A 的内存复制到两个不同的数组中?

当我通过另一个函数传递同一个数组时,我永远不需要“重置”数组的原始位置?

static const int A[3] = {1, 5, 8};

void fun(const int B[]){
    printf("val = %d\n", *B);
    B++;
    printf("val = %d\n", *B);
}

int main() {

    fun(A);
    fun(A);

    return 0;
}

输出:

val = 1
val = 5
val = 1
val = 5

例如,当我不使用时const,我可以看到它们共享相同的内存,但那只是在我不使用时const

static int A[3] = {1, 5, 8};

void fun(int B[]){
    printf("val = %d\n", *B);
    *B = 10;
    printf("val = %d\n", *B);
}

int main() {

    fun(A);
    fun(A);

    return 0;
}

输出:

val = 1
val = 10
val = 10
val = 10

标签: arrayscpointers

解决方案


您修改本地指针。为什么是指针?因为数组作为指针传递。要修改原始指针,您需要将指针传递给指针

int A[] = {1, 5, 8, 10};

void fun(const int **B){
    printf("val = %d\n", **B);
    (*B)++;
    printf("val = %d\n", **B);
}

int main() 
{
    int *C = A;
    fun(&C);
    fun(&C);

    return 0;
}

推荐阅读