我的问题基于以下代码:
int myfunct(int ary[], int arysize)
int myfunct2(int *ary, int arysize)
int main(void){
int numary[10];
myfunct(numary, 10)
myfunct2(numary, 10)
return;
}
int myfunct(int ary[], int arysize) {
//Whatever work is done
}
int myfunct2(int *ary, int arysize) {
// Whatever work is done
}
是否有理由使用其中一个而不是另一个?详细说明一下,当涉及数值数组时,是否有任何理由希望使用指针表示法而不是数组表示法。如果使用指针表示法,则将在函数内使用指针算法等。如果使用 [] 数组表示法,则可以像往常一样使用数组。我是编程新手,目前我看不到使用指针表示法有任何好处。
我的确切问题是,是否有任何理由使用指针表示法将数值数组传递给函数,从而在函数内使用指针操作。
最佳答案
当您将函数参数声明为数组时,编译器会自动忽略数组大小(如果有)并将其转换为指针。也就是说,这个声明:
int foo(char p[123]);
100% 等同于:
int foo(char *p);
事实上,这与符号无关,而是与实际类型有关:
typedef char array_t[42];
int foo(array_t p); // still the same function
这与您如何在函数内访问 p
无关。此外,[]
运算符不是“数组表示法”。 []
是指针运算符:
a[b]
100% 等同于:
*(a + b)
关于C 指针表示法与数组表示法比较 : When passing to function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14298957/