0

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

#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

4 回答 4

1

k=j将指针分配给指针k的值(指向的地址)j。这会切换数组 (num1num2)k指向的位置,但不会更改任何数组元素的值。

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

于 2012-11-23T11:58:10.523 回答
0

k = j;意思是“将存储的j值赋值为”的语句k,只需将存储的值复制jk。它对数组没有任何作用,只是指针指向.k指向的地址j。赋值和增量只影响局部变量jk,没有别的。

当您编写*k = *j;时,它本质上意味着“将地址的内容分配j给地址k”,它进行复制和递增j并将k它们指向下一个数组元素。

于 2012-11-23T12:00:42.970 回答
0

因为您还没有初始化数组num2,也没有从num1.

于 2012-11-23T11:55:39.170 回答
0

*k = *j将“单元格”j指向的内容复制到单元格k指向的位置。反之,k = jk到哪里j点。如果您考虑这一点,k = j那就错了,因为您没有更改数组的内容,而只是更改了局部变量k。因此,在您的示例中,内部的 print 语句display实际上不是 print num2,而是num1(在 print 语句的点,k指向与 dos 相同的位置j,它是 的元素num1)。

于 2012-11-23T11:59:05.243 回答