0

当数组作为 C 或 C# 中的参数传递给函数时,函数或函数是否可以对参数进行操作?就像它在指针上一样?

4

5 回答 5

2

此答案仅适用于 C

是的,绝对可以。函数将数组视为指针

例如:

#include <stdio.h>

#define SIZE 10

void anyfunction(int array[]){  
    int i=0;

    for(i=0;i<SIZE;i++){
        array[i] = i;
    }
}

int main(){
    int i=0;
    int numbers[SIZE] = {0};

    anyfunction(numbers);

    for(i=0;i<SIZE;i++){
        printf("%d ",numbers[i]);
    }

    printf("\n");
    return 0;   
}

输出:

Notra:Desktop Sukhvir$ ./test
0 1 2 3 4 5 6 7 8 9 
于 2013-11-06T13:46:29.283 回答
1

是的,它可以,但数组衰减为指针。

出现在表达式中的 T 数组类型的左值 [参见问题 2.5 ] 衰减(除了三个例外)成指向其第一个元素的指针;结果指针的类型是指向 T 的指针,因为数组不是“可修改的左值”

(例外情况是数组是 sizeof 或 & 运算符的操作数,或者是字符数组的文字字符串初始值设定项。)

于 2013-11-06T13:46:04.880 回答
1

在大多数但不是所有上下文中,任何数组类型的表达式都会隐式转换为(“衰减”为)指向数组对象第一个元素的指针,除非它是一元&sizeof运算符的操作数。
推荐阅读:CFAQ 数组和指针

于 2013-11-06T13:47:27.523 回答
1

在 C 的上下文中,数组名指向基地址。

说,a[10]引用第四个对象,即a[3],这是一个等效的方法 - *(a+3)

因此,它让您了解如何将数组用作指针。

当您将数组名称作为参数传递给函数时,实际上是在传递数组的基地址。

于 2013-11-06T13:53:22.350 回答
0

是的,一点没错。您可以在函数中使用该数组作为数组行为。

于 2013-11-06T13:52:28.723 回答