C++中如何向long int动态数组分配随机int值?
问题解决:动态数组填充随机数的类型错误修正
你的函数参数long int *fillArr[]声明的是一个指针数组,数组里的每个元素都是long int*类型,但你要赋值的rand()返回int类型,直接赋值必然出现类型不兼容的错误。以下分两种常见场景给出修正方案:
场景1:填充long int类型的动态数组(最常用情况)
这种情况需要修改函数参数为指向long int的指针(数组传参会自动退化为指针),再将rand()的结果强制转换为long int类型赋值:
#include <stdlib.h> // 参数改为long int*,对应long int类型的动态数组 void autoFill(long int *fillArr, int length) { for (int i = 0; i < length; i++) { // 将int类型的rand()结果转为long int fillArr[i] = (long int)rand(); } } // 调用示例 int main() { // 随机种子仅需初始化一次,放在函数外部 srand(1024); int arrLength = 10; // 分配long int类型的动态数组内存 long int *dynamicArr = malloc(arrLength * sizeof(long int)); autoFill(dynamicArr, arrLength); // 使用数组后记得释放内存 free(dynamicArr); return 0; }
注意:不要把srand()放在autoFill函数内,否则每次调用该函数都会重置随机种子,导致生成的随机数序列完全重复。
场景2:操作指针数组(每个元素是指向long int的指针)
如果你的fillArr确实是指针数组,且每个元素已经指向有效的long int内存空间,需要通过解引用指针完成赋值:
#include <stdlib.h> void autoFill(long int *fillArr[], int length) { for (int i = 0; i < length; i++) { // 解引用fillArr[i],为它指向的long int变量赋值 *fillArr[i] = (long int)rand(); } } // 调用示例 int main() { srand(1024); int arrLength = 10; // 分配指针数组的内存 long int **ptrArray = malloc(arrLength * sizeof(long int*)); // 为每个指针单独分配long int内存 for (int i = 0; i < arrLength; i++) { ptrArray[i] = malloc(sizeof(long int)); } autoFill(ptrArray, arrLength); // 释放内存:先释放每个指针指向的空间,再释放指针数组 for (int i = 0; i < arrLength; i++) { free(ptrArray[i]); } free(ptrArray); return 0; }
内容的提问来源于stack exchange,提问作者Dan2004
相关产品推荐
相关产品推荐

