将int转换为指针int*ptr位置



我在一个指针中有5个数字

int* reversevec(int* ptr, unsigned int Ne){
int* ReverResult;
unsigned int rever=Ne, z;
ReverResult=(int*)malloc(Ne*sizeof(int));
for (int i = 0; i < Ne; ++i)
{
z=*(ptr+rever);

printf("%i ",z);//to be sure z starts from the last number on ptr to the fisrt
rever--;
}
return ReverResult;
}

示例元素数量(Ne)=5

int*ptr有5个数字{1 2 3 4 5}

每次打印z时,我都会得到{5 4 3 2 1}

但我无法将z保存到*ReverResult 中

ReverResult=(z+rever);

这一行是我试图放入cicle for中的内容,以将z和位置保存到int指针ReverResult中,但我无法将int转换为int*;

这里有很多问题

z是一个局部变量int。返回它的地址将没有用处,因为它将超出范围。从其地址返回偏移量更糟糕,因为这在内存中是一个完全无关的位置。

你也有一个错误。想象数字元素是一。然后,您将尝试查看ptr+1而不是ptr+0。

您也标记了这个c++,但正在编写c风格的代码。

为了回答您的主要问题,与其写ReverResult=(z+rever),不如写*(ReverResult + rever - 1) = *(ptr + i)

反之,您需要取消引用指针才能进行赋值。毕竟,使用纯指针算法会更容易:

int* result = malloc(sizeof(*ptr) * ne);
// let's just have to pointers running through the two arrays:
for(int* p = ptr + ne, *r = result; p-- != ptr; ++r)
{
*r = *p;
//  ^    ^  this is the important part: dereference both pointers
}

如果您仍然喜欢索引,可以使用operator[]:

--ne; // so that we don't have to subtract within the loop again and again
for(size_t index = 0; index <= ne; ++index)
{
result[index] = ptr[ne - index];
//        ^^^^^^^ again: dereferencing, this time with offset
}

array[index]完全等同于*(array + index),实际上它也等同于index[array](例如7[array]),后者经常被用来愚弄没有经验的人。。。

相关内容

  • 没有找到相关文章

最新更新