我想编写一个程序来更改指针指向的地址中的值,但保持地址不变。我写了一个小程序来测试它,但遇到了一些问题。
#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)
。您传递了一个级别指针,因此预计您不会在没有任何错误的情况下取消引用它两次。
当您使用完动态分配的内存时,还要检查 malloc
和 free
的返回值。
关于改变指针的值但保留地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48117700/