我需要编写一个程序,该程序实现将数组传递给函数的3种方式。
2个函数按预期工作,但是传递指针的函数存在问题。我尝试使用Google搜索,然后进行其他测试,但是我似乎不明白这些指针应该如何工作。第一个功能应输出1、2、3。
第二个功能应输出11、12、13
第三功能应输出101、102、103
第一个和第三个功能正常工作,但是第二个功能存在问题。这是我写的:
int main(void)
{
int iArray[3] = {100,234,567};
f1(iArray);
f2(iArray);
f3(iArray);
return EXIT_SUCCESS;
}
void f1(int ia[3]) // sized array
{
ia[0] = 1;
ia[1] = 2;
ia[2] = 3;
for (int i = 0; i < 3; i++)
{
printf("%d\n", ia[i]);
}
printf("\n");
}
void f2(int* pi) // pointer
{
*pi = 11, 12, 13;
printf("%d", *pi);
printf("\n\n");
}
void f3(int ia[]) // unsized array
{
ia[0] = 101;
ia[1] = 102;
ia[2] = 103;
for (int i = 0; i < 3; i++)
{
printf("%d\n", ia[i]);
}
}
在C语言中,您不能传递数组,只能传递指向其元素的指针。这意味着对于所有参数,例如int ia[]
编译器,实际上会将其视为int *ia
。任何潜在的“数组”大小都是无关紧要的,您所有的函数都使用精确的comeint *
类型参数。
这是因为数组自然会衰减到指向其第一个元素的指针。
实际上,函数调用
f1(iArray);
f2(iArray);
f3(iArray);
实际上等于
f1(&iArray[0]);
f2(&iArray[0]);
f3(&iArray[0]);
现在针对第二个函数的问题,此行是:
*pi = 11, 12, 13
这等效于:
pi[0] = 11, 12, 13;
它使用逗号运算符,使其等效于:
pi[0] = 13;
要分配数组的每个元素,您需要为每个元素建立索引,就像使用“ array”函数一样:
pi[0] = 11;
pi[1] = 12;
pi[2] = 13;
当然,您还需要通过循环以相同的方式打印值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句