从c中的函数返回数组

时间:2012-11-23 11:52:34

标签: c arrays

我有点困惑。请查看以下程序:

#include<stdio.h>
void display (int *j, int *k);

int main()
{
    int num1[]={1,2,3,4,5};
    int num2[5];
    int i;
    display (num1,num2);
    for (i=0;i<=4;i++)
        printf("%d,", num2[i]);
    return 0;
}

void display (int *j, int *k)
{
    int l;  
    for (l=0;l<=4;l++)
    {
        k=j;
        printf("%d,", *k);
        j++;
        k++;        
    }

}

在此printf("%d,", num2[i]);中没有给出数组。但是当我们将*k=*j;放在函数中时,它就有效。你能解释一下原因吗?感谢。

4 个答案:

答案 0 :(得分:1)

k=j将指针k指定给指针j的值(地址指向)。这会切换哪个数组(num1num2k指向但不会更改任何数组元素的值。

*k=*jk指向的数组元素设置为数组元素j指向的值。

答案 1 :(得分:0)

因为您尚未初始化数组num2,也未从num1复制它。

答案 2 :(得分:0)

*k = *j将“单元格”j点的内容复制到指向的单元格k。相反,k = j使k指向j指向的位置。如果你考虑这个,k = j是错误的,因为你不改变数组的内容,而只是改变局部变量k。因此,在您的示例中,display内的print语句实际上不会打印num2,而是num1(在print语句中,k指向与j相同的位置,这是num1)的元素。

答案 3 :(得分:0)

声明k = j;表示“将j中存储的值指定为k的值”,只是将j中存储的值复制到k }。它对数组没有任何作用,只是指针k指向j指向的地址。赋值和增量仅影响局部变量jk,没有别的。

当您撰写*k = *j;时,它实际上意味着“将地址内容j分配给地址k”,该地址执行复制,并递增j和{{ 1}}将它们指向下一个数组元素。