改变指针的值但保留地址

标签 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;

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

最佳答案

嗯,是的,你做错了。正确的应该是

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

考虑到数组会衰减为指向第一个元素的指针,这就足够了 - 使您能够更改数组的值。

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

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

供您引用,entry1[i]*(entry+i)。但你却这么做了 **(条目+i)。您传递了一个级别指针,因此预计您不会在没有任何错误的情况下取消引用它两次。

<小时/>

当您使用完动态分配的内存时,还要检查 mallocfree 的返回值。

关于改变指针的值但保留地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48117700/

相关文章:

C - 在函数之间传递数组未给出预期结果

c - 为什么我在 send() 函数中丢失了这个字节?

C语言。 free() 并更改了指针

用 C 语言编译 LZMA SDK 会创建一个 lib,而我想要一个 dll,我该怎么做?

C++ 指向常量错误的指针

C - 使用指针向上移动数组元素

python - 将 argv 的元素复制到新数组中

c# - 从 C++/Java/C# 代码调用 C 方法?

c - 这些示例(* 和 &)之间有什么区别?

c - 如何从递归中的函数编辑指向列表节点的指针?