如何删除数组中的最后一个元素?

时间:2019-11-13 03:34:41

标签: c

在给定的代码中,有一种方法

for(i = pos - 1 ; i < size -1 ; i++)
{
a[i] = a[i+1] ;
}

,但假设大小为4,我想删除数组的第4个位置值。 在此场景中,我无法理解此代码的工作方式。

1 个答案:

答案 0 :(得分:1)

似乎您不太了解C中的数组。

在C语言中,数组是相同类型且因此大小相同的项的连续序列。

系统最初将为阵列分配空间。

例如,当您说int a[4]并运行函数时,a的类型为“ int的数组”,则每个条目的类型都是'int'。
通常,一个int值需要4个字节的空间。 [4]意味着将分配四个int的空间。也就是说,它将在您的内存中分配4 * 4 = 16字节。

例如,下面是a分配的空间:

01010101 first byte (start of a[0]) 01111110 second byte 00101001 third byte 00000111 fourth byte 01100000 fifth byte (start of a[1]) ..... ..... ..... 01010101 16th byte

虽然刚刚分配了字节数,但未知。您可以为其初始化或为其赋值。

好的,那么当您使用a做某事时,您可以说a[1]访问由5个字节到8个字节的4个字节表示的int。

如果您说a[10]会怎样?
该空间未由您的程序分配!访问它是一个错误。但是只有当您幸运时,可能会显示一个错误提示窗口,显示“内存0x6463a80发生访问冲突(数字只是示例)”,否则您将得到一个未知值而没有明显警告,那就更糟了!

根据您的问题,我知道您想说的是
“哦,天哪,我最初有int a[4],但是在代码后面,我想将其缩小为int a[3]之类的东西!”

解决方案是:只需忽略a[3],就可以查看它不存在!永远不要使用a[3]那就可以了!

如果您想完全访问“添加”,“插入”,“删除”等操作,则不适合使用数组。考虑使用C ++。它具有std库,并且有Vector类型。它不是数组,它的工作原理与此不同。搜索Google或与我聊天,如果您想知道。

您可能不完全理解我在这里所说的话,但请随时提问。我几乎与您同在一条船上,我愿意教您并为您提供帮助。