我正在编写一个小程序来进行一些数字运算,它需要在函数之间传递数组.函数应该接受并返回指针,对吧?
例如,这(我知道它可能不是最有效的):
int* reverse(int* l, int len) {
int* reversed = malloc(sizeof(*reversed)*len);
int i, j;
for (i = 0, j = len-1; i < len; i++, j--) {
reversed[j] = l[i];
}
return reversed;
}
Run Code Online (Sandbox Code Playgroud)
我使用指针吗?
请考虑以下陈述:
int *pFarr, *pVarr;
int farr[3] = {11,22,33};
int varr[3] = {7,8,9};
pFarr = &(farr[0]);
pVarr = varr;
Run Code Online (Sandbox Code Playgroud)
在这个阶段,两个指针都指向每个相应阵列地址的开头.对于*pFarr,我们目前正在考虑11和*pVarr,7.
同样,如果我通过*farr和*varr请求每个数组的内容,我也得到11和7.
到现在为止还挺好.
现在,让我们尝试pFarr++和pVarr++.大.正如预期的那样,我们现在看22和8.
但现在...
试图拉升farr++和varr++...我们得到"错误类型的参数来增加".
现在,我认识到数组指针和常规指针之间的区别,但由于它们的行为相似,为什么会出现这种限制呢?
当我还考虑在同一个程序中我可以用表面上正确的方式和另一种不正确的方式调用以下函数时,这让我更加困惑,我得到了相同的行为,尽管与上面发布的代码中发生的情况形成对比!?
working_on_pointers ( pFarr, farr ); // calling with expected parameters
working_on_pointers ( farr, pFarr ); // calling with inverted parameters
Run Code Online (Sandbox Code Playgroud)
.
void working_on_pointers ( int *pExpect, int aExpect[] ) {
printf("%i", *pExpect); // displays the contents of pExpect ok
printf("%i", *aExpect); // displays the contents of …Run Code Online (Sandbox Code Playgroud)