更改指针的值但保留地址

时间:2018-01-05 16:36:43

标签: c pointers

我想编写一个程序,它改变指针指向的地址中的值,但保持地址相同。我写了一个小程序来测试它,但我遇到了一些问题。

#include <stdio.h>

void swap(int *entry1, int *entry2, int length)

{
  int i,temp;

  for(i=0; i<length; i++)
    {
      temp = *entry1[i];
      *entry1[i] = *entry2[i];
      *entry2[i] = temp;
    }
}

int main()

{
  int length=5, i;

  int *entry1 = malloc(length * sizeof(int));
  int *entry2 = malloc(length * sizeof(int));

  for(i=0;i<length;i++)
    {
      entry1[i] = i + 1;
      entry2[i] = length - i;

    }
swap(entry1, entry2, length);

return 0;
}

我的印象是我可以使用星号来访问存储在指针指向的地址中的值。但是,当我运行此代码时,我收到错误:

error: invalid type argument of unary ‘*’ (have ‘int’)

如果我这样做,我相信:

temp = entry1[i];
entry1[i] = entry2[i];
entry2[i] = temp;

这将有效地交换价值,但是,它也会交换地址&#39;这是我不想要的。

1 个答案:

答案 0 :(得分:1)

嗯,你做错了。正确的是

  temp = entry1[i];
  entry1[i] = entry2[i];
  entry2[i] = temp;

如果数组衰减成指向第一个元素的指针,这就足够了 - 让你可以改变数组的值。

invalid type argument of unary ‘*’ (have ‘int’) 

错误本身表示您试图取消引用int而不是地址或某个指针值。

为了您的信息,entry1[i]*(entry+i)。但你这样做了 **(entry+i)。你传递了一个单一级别的指针,因此预计你不会没有任何错误地取消引用它。

完成后,请检查mallocfree动态分配内存的返回值。