数组相关问题

Posted

技术标签:

【中文标题】数组相关问题【英文标题】:Array Related Question 【发布时间】:2010-06-13 15:10:10 【问题描述】:

我有以下程序:

int insert(int *array, int arraySize, int newElement)

   array[arraySize + 1] = newElement;
   return (arraySize+1);     // Return new Array size......

int main()

   int array[] = 1,2,3,4,5;
   int arraySize = sizeof(array) / sizeof(int);

   insertInArray(array, arraySize,6);
   print(array);

我正在尝试用 C 语言编写这个程序,但是当我在插入后打印数组时,它不会打印所需的输出。

如果我做错了,请纠正我。

更新代码:

int insert(int **array, int arraySize, int newElement)

   int i;    
   *array = realloc(*array,++arraySize * sizeof(int));    
   (*array)[arraySize] = newElement;    
   return (arraySize);


int main()

   int i;
   int arraySize = 5;
   int *array = (int *)malloc(arraySize * sizeof(int));
   for(i=1; i<=arraySize; i++)
      array[i] = i;

   printArray(array, arraySize);
   arraySize = insert(&array, arraySize,6);
   printArray(array, arraySize);

【问题讨论】:

什么?谁告诉你你可以像这样在 C 中改变数组的大小! 那么,如何在数组的最后一个位置插入一个元素...... 我怀疑你的背景是 php 或类似的环境。在 C 中,数组大小在声明后是固定的...... C 中有没有一个叫做 print 的函数??不是 printf 吗? 是的,数组在被调用后的大小是不变的……而且,你写的函数和你调用的函数不一样,所以我想知道为什么你的文件甚至被编译了。假设您费心运行此代码,此时似乎值得怀疑。 【参考方案1】:

你不能像这样扩展 C 数组的大小;在这方面它不是动态的;一点也不。您必须显式地重新分配内存。由于在 C 中可以通过两种方式分配内存,情况变得更加复杂:从堆栈(函数中的局部变量)和从堆(调用malloc)。 (实际上我猜这是三种方式,如果你包括全局/静态。)

因此有两点需要改变:

    如果您只想使用简单数组,而不是包含数组和一些大小指示的结构,您的“插入”函数将必须分配新内存并将旧数组值复制到其中 应从堆中分配要由该函数操作的数组。

【讨论】:

【参考方案2】:

首先,这会导致缓冲区溢出(两个):

您已为 5 个整数(最后一个索引 4)分配空间。那么:

array[arraySize + 1] = newElement;

写入索引 6,即数组末尾 两个。如果要更改数组的大小,则需要使用 realloc.,并且您的函数需要不同的签名,以便它可以修改指针。类似于(省略错误检查):

int insert(int **array, int arraySize, int newElement)

  *array = realloc(*array, ++arraySize * sizeof(int));
  (*array)[arraySize - 1] = newElement;
  return arraySize;     // Return new Array size......


int arraySize = 5;
int *array = malloc(arraySize * sizeof(int));
for(int i = 0; i < arraySize; i++)

  array[i] = i + 1;


arraySize = insert(&array, arraySize, 6);

其次,在不知道尺寸的情况下,您还不清楚您期望打印通常如何工作。当您将数组传递给函数时,您必须传递长度或以约定的方式终止数组(例如使用 NULL 或 0)。

【讨论】:

ohh....这只是为了表明数组打印的逻辑在这里工作......我如何在数组的最后一个位置添加一个新元素,通过一个函数………… 如何在数组中插入元素.....在这一行之后...... int *array = malloc(arraySize * sizeof(int)); 我认为使用对指针的引用而不是使用指向指针的指针更好......尤其是对于新手...... @AGeek,我添加了初始化。 @Beta,阅读问题。 C 没有引用。 仍然无法正常工作.......运行时错误............ ***检测到 glibc *** ./a.out: realloc(): invalid下一个尺寸:0x09c44008 ***我不知道这个错误............

以上是关于数组相关问题的主要内容,如果未能解决你的问题,请参考以下文章

二维数组相关问题

BigQuery 相关子查询 - 将数组转换为数组

数组区间操作,数组中重复数相关

集合的相关问题

Java基础数组相关的基本使用

数组排序相关