Sys*_*Fun 11 c arrays pointers function
我的问题基于以下代码:
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
}
Run Code Online (Sandbox Code Playgroud)
是否有理由使用其中一个而不是另一个?详细说明,当涉及数值数组时,有任何理由想要在数组表示法上使用指针表示法.如果一个人使用指针表示法,那么在函数指针运算中将使用等等.如果使用[]数组表示法,可以像往常一样使用数组.我是编程新手,我目前看不到使用指针表示法有什么好处.
我的确切问题是,有没有理由使用指针表示法将数值数组传递给函数,因此在函数中使用指针操作.
mel*_*ene 11
将函数参数声明为数组时,编译器会自动忽略数组大小(如果有)并将其转换为指针.也就是说,这个声明:
int foo(char p[123]);
Run Code Online (Sandbox Code Playgroud)
是100%相当于:
int foo(char *p);
Run Code Online (Sandbox Code Playgroud)
实际上,这不是关于符号而是关于实际类型:
typedef char array_t[42];
int foo(array_t p); // still the same function
Run Code Online (Sandbox Code Playgroud)
这与您p在函数中的访问方式无关.此外,[]运算符不是"数组符号".[]是一个指针运算符:
a[b]
Run Code Online (Sandbox Code Playgroud)
是100%相当于:
*(a + b)
Run Code Online (Sandbox Code Playgroud)
两种符号之间没有真正的功能差异.在C中,当您将数组变量传递给函数时,无论符号如何,它都会衰减到指针.但是,在我看来,指针表示法更可取.[]功能定义中的符号问题是,在我看来,它有点误导:
void foo(int array[])
{
}
Run Code Online (Sandbox Code Playgroud)
新手C程序员中普遍存在的错误是假设sizeof(array)会给你数组中元素的数量乘以sizeof(int),就像array在堆栈中声明的数组变量一样.但事实是array,尽管存在误导性的[]符号,但它已被衰减为指针,因此sizeof(array)将会如此sizeof(int*).array实际上只是指向第一个元素的指针,或者可能是指向任何地方分配的单个整数的指针.
例如,我们可以foo像这样调用:
int x = 10;
foo(&x);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,[]定义中的符号foo有点误导.
| 归档时间: |
|
| 查看次数: |
13801 次 |
| 最近记录: |