当数组作为 C 或 C# 中的参数传递给函数时,函数或函数是否可以对参数进行操作?就像它在指针上一样?
问问题
187 次
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 回答