gpt4 book ai didi

c - 如何将这些数字存储在 C 中?

转载 作者:太空宇宙 更新时间:2023-11-04 00:36:23 24 4
gpt4 key购买 nike

假设你有一个这样的数组

{ 1 2 5 7 2 3 7 4 2 1 }

并且您想存储数组前半部分和后半部分之间的差值位于位置 2 和 4。

诀窍是,我需要稍后在其他代码中使用这些存储的数字,所以我不知道如何存储这些数字。

我有这个方法

int * getPositions(int *array, int size){
int * c[(size/2)];
int counter = 0;
for(int i = 0; i < size /2; i++) {
if (*(array + i) != *(array + (size - 1) - i)) {
c[counter]= (int *) i;
counter++;
}
}return (int *) c;
}

但它似乎将 -1774298560 存储到每个位置。当我尝试打印它时我知道这个原因

int c = (int) getPositions(array, size_of_array);

for(int i = 0; i < ((size_of_array/2)); i++){
printf("%d\t", c);
}

它打印出来的是

-1774298560 -1774298560 -1774298560 -1774298560 -1774298560

PS:我在别处初始化了 arraysize_of_array

PS:我引用了大家的意见,把代码改成如下

int * getPositions(int *array, int size){
int * c = (int *) malloc((size_t) (size/2));
int counter = 0;
for(int i = 0; i < size /2; i++) {
if (*(array + i) != *(array + (size - 1) - i)) {
c[counter]= i;
counter++;
}
}

最佳答案

如果函数要返回一个简单的int数组,您需要声明一个指向int的指针,然后调用malloc为数组预留空间。然后填充数组,并返回指针。调用函数需要在某个时候释放内存。

int *getPositions(int *array, int size)
{
int *c = malloc( (size/2) * sizeof(int) );
if ( c == NULL )
return NULL;

// put stuff in the array using array syntax, e.g.
c[0] = array[0];

return c;
}

像这样调用函数

int *c = getPositions( array, size );

if ( c != NULL )
for( int i = 0; i < (size/2)); i++ )
printf( "%d\t", c[i] );

free( c );

注意事项:

  • 是的,用 C 语言检查错误很痛苦,但你必须这样做,否则你的程序会随机崩溃。
  • 您可以对指针使用数组语法,但要确保您的读写操作不超过指针引用的内存末尾。
  • NULL 指针传递给 free 是合法的。

关于c - 如何将这些数字存储在 C 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33859248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com