Arrays 当数组作为参数通过函数传递时,它们的索引是否为零?C程序设计

Arrays 当数组作为参数通过函数传递时,它们的索引是否为零?C程序设计,arrays,c,pointers,Arrays,C,Pointers,当数组零作为参数通过函数传递时,它们是否被索引?或者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() {

当数组零作为参数通过函数传递时,它们是否被索引?或者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
val = 1
val = 10
val = 10
val = 10
例如,当我不使用
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 = 5
val = 1
val = 5
val = 1
val = 10
val = 10
val = 10

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

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;
}

数组始终为0索引<代码>B++但是,它只修改本地指针,不会更改数组
B
点中的任何内容to@UnholySheep因此,如果我想将数组传递给另一个函数,我永远不需要“重置”数组我不明白你所说的“重置”是什么意思-
B
是一个指向函数的本地指针,它在函数外部永远不可见。假设您正在寻找的答案是“是”,虽然很难说,因为您似乎对“数组参数”的作用有错误的理解,但该语句没有意义,因为您无法更改数组开始的索引。每个数组都从索引0开始。标题没有意义。数组不能在C编程语言中作为参数传递给函数(除非它们嵌入到结构或联合中)?@当然是邪恶的羊。所以你应该投资一些代码编辑器。@DanielMårtensson你没有看到区别吗?它记住索引?首先你从
a
创建一个数组
C
,然后传递…地址?到功能
fun
。而
**
意味着什么?