有没有办法malloc数组大小为10的整数指针并返回其值?
我正在努力理解为什么这不能像我希望的那样起作用。 我试图在一个函数中malloc一个整数指针,然后返回到主函数,并且值保持不变。我假设您可以这样做,因为整数指针只是一个地址,与size变量相同。所以我认为newPtr将包含值的内容,但它没有。为什么会这样 我试着看看如何使这项工作,但我唯一想到的是使函数参数类型int**arr有没有办法malloc数组大小为10的整数指针并返回其值?,c,arrays,pointers,malloc,C,Arrays,Pointers,Malloc,我正在努力理解为什么这不能像我希望的那样起作用。 我试图在一个函数中malloc一个整数指针,然后返回到主函数,并且值保持不变。我假设您可以这样做,因为整数指针只是一个地址,与size变量相同。所以我认为newPtr将包含值的内容,但它没有。为什么会这样 我试着看看如何使这项工作,但我唯一想到的是使函数参数类型int**arr #include <stdio.h> #include <stdbool.h> #include <stdlib.h> bool r
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
bool readData(int * arr, int * size);
int main() {
int i;
int countSize = 10;
int * newPtr;
bool rtv = true;
rtv = readData(newPtr, &countSize);
if (rtv == false) {
printf("read data failed\n");
return -1;
}
for (i = 0; i < countSize/2; i++) {
printf("%d\t", newPtr[i]);
}
printf("\n");
printf("new size: %d\n", countSize);
free(newPtr);
return 0;
}
bool readData(int * arr, int * size) {
int i;
arr = malloc(sizeof(int*) * *size);
if (arr == NULL) {
printf("malloc error\n");
return false;
}
for (i = 0; i < *size; i++) {
arr[i] = i * i;
}
for (i = 0; i < *size; i++) {
printf("[%d] = %d\n", i, (arr)[i]);
}
*size = *size * 2;
return true;
}
#包括
#包括
#包括
bool readData(int*arr,int*size);
int main(){
int i;
int countSize=10;
int*newPtr;
bool-rtv=true;
rtv=读取数据(newPtr和countSize);
如果(rtv==假){
printf(“读取数据失败\n”);
返回-1;
}
对于(i=0;i
问题在于您使用的是常规指针:
bool readData(int * arr, int * size)
因此,当您在其中按如下方式分配时:
arr = malloc(sizeof(int*) * *size);
您正在更改指针的本地值。要操作根值,需要执行以下操作:
bool readData(int** arr, int * size)
那么你在哪里做:
*arr = malloc(sizeof(int*) * *size);
不过这有点乱。而是将其转换为返回值:
int* readData(int * size) {
int* arr = malloc(...);
// ...
return arr;
}
并在顶部捕捉到这一点:
int* rtv = readData(&countSize);
如果出现严重错误,您总是可以返回
NULL
。当该值在修改后从未使用过时,您为什么要操纵size
。将其作为指针发送到上面会使事情复杂化。你迭代了一半的数组,因为只有一半的数组“存在”,这使得这个大小有误导性。很抱歉,这只是一个例子来解释为什么int*arr不起作用。int*size是我在程序中使用的占位符。谢谢你的帮助。我想理解它的最好方法就是把它看作一个局部变量。我使用了您的第一个方法,因为我需要返回一个布尔值。看到int**arr很奇怪,因为这让我想起了二维数组。数组不是指针,指针也不是数组(尽管数组在访问时会衰减为指针)int**
是指向int
指针的单指针。首先分配一定数量的指针,并将该块分配给指针(例如,int**data=malloc(nptrs*sizeof*data);
),然后分配将通过每个指针访问的int
数量(例如,data[i]=malloc(numint*sizeof*data[i]);
记住验证每个分配。